Модераторы: ginnie, korob2001

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl+capicom, подписать , зашифровать и отправить 
:(
    Опции темы
yodgik
  Дата 18.1.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



Подскажите что не так. Пытаюсь на перле написать скрипт для подписи и шифрования файла 
для дольнейшей отправки по smtp(smime)
получается подписать сообщение сообщение уходит всё коректо. Но траблы начинаются на этапе шифрования гляньте в код скажите что ни так.
Код

#!c:\perl\bin\perl -w
use strict;
use Win32::OLE;
use Win32::OLE::Variant;
use warnings;
use NET::SMTP;
use MIME::Entity;
use MIME::Base64;
use Encode;

my $Masksign = '03dd1d37cbd03cf94ee25f4c429546a6a8ff29c3';
my $StoreName2 = 'AddressBook';
my $maskencrypt='be723b3c23db298e8e18b974b012bbc4be897c5b';
my $StoreName = "My";
my $DocName = 'test.txt';





my $cert ;
my $certforsign = Win32::OLE->new("CAPICOM.Certificate") || die "Could create object: ".Win32::FormatMessage Win32::GetLastError()."\n";;
#my $certforencrypt = Win32::OLE->new("CAPICOM.Certificate") || die "Could create object: ".Win32::FormatMessage Win32::GetLastError()."\n";;
my $Store = Win32::OLE->new("CAPICOM.Store") || die "Could create object: ".Win32::FormatMessage Win32::GetLastError()."\n";
my $Signer = Win32::OLE->new('CAPICOM.Signer') or die "Oops, cannot start CAPICOM.Signer";
my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Oops, cannot start CAPICOM.SignedData";
my $EncryptedData = Win32::OLE->new("CAPICOM.EncryptedData") or die "Oops, cannot start CAPICOM.EncryptedData";
my $EnvelopedData = Win32::OLE->new("CAPICOM.EnvelopedData") or die "Oops, cannot start CAPICOM.EncryptedData";

use constant {
Unknown => 0,
Sign => 1,
Timestamp => 2,
Verify => 3,
    CAPICOM_LOCAL_MACHINE_STORE           => 1, 
    CAPICOM_CURRENT_USER_STORE            => 2, 
    CAPICOM_SMART_CARD_USER_STORE            => 4, 
    CAPICOM_OTHER_STORE =>  1,
    CAPICOM_STORE_OPEN_READ_ONLY  => 0, 
    CAPICOM_KEY_STORAGE_DEFAULT => 0, 
    CAPICOM_CERTIFICATE_FIND_SHA1_HASH           => 0, 
    CAPICOM_ENCRYPTION_ALGORITHM_RC2       => 0,
    CAPICOM_ENCRYPTION_ALGORITHM_RC4       => 1 ,
    CAPICOM_ENCRYPTION_ALGORITHM_DES       => 2  ,
    CAPICOM_ENCRYPTION_ALGORITHM_3DES      => 3   ,
    CAPICOM_ENCRYPTION_ALGORITHM_AES       => 4   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM  => 0   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS  => 1   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS  => 2   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS => 3   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS => 4   ,
    CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS => 5 ,
    CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME => 1,
    CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME => 1,
    CAPICOM_CERTIFICATE_FIND_ROOT_NAME => 3,
    CAPICOM_ENCODE_ANY => 0xffffffff,
        CAPICOM_ENCODE_BASE64 => 0,
        CAPICOM_ENCODE_BINARY => 1,
}; 

$Store->Open(CAPICOM_CURRENT_USER_STORE, $StoreName);
my $Certificates = $Store->Certificates;

if ($Certificates->Count > 0)
{
$Certificates = $Certificates->Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, $Masksign);
}
SWITCHCERT:
{
if ($Certificates->Count == 0)
{
print "Error! Сертификат не найден!\n";
exit;
}
if ($Certificates->Count == 1)
{
$Signer->LetProperty('Certificate',$Certificates->Item(1));
last;
}
print "Error! Ошибка работы с сертификатом!\n";
exit;
}
#encrypt 
$Store->Open(CAPICOM_CURRENT_USER_STORE, $StoreName2);
   $EnvelopedData->Algorithm->LetProperty('Name',CAPICOM_ENCRYPTION_ALGORITHM_DES );
   $EnvelopedData->Algorithm->LetProperty('KeyLength',CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS  );
my $certforencrypt = $Store->Certificates;

if ($certforencrypt->Count > 0)
{
$certforencrypt  = $certforencrypt->Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, $maskencrypt);
}
SWITCHCERT2:
{
if ($certforencrypt ->Count == 0)
{
print "Error! Сертификат не найден!\n";
exit;
}
if ($certforencrypt ->Count == 1)
{
       my $Recipient;
        foreach my $Recipient (in $certforencrypt ){
            $EnvelopedData->Recipients->Add($Recipient);
            }
            #$EnvelopedData->Recipients->Add($Recipient);
            last;
#print "Error! Ошибка работы с сертификатом!\n";
#exit;
}
}
#end encrypt

undef $certforencrypt;
undef $Certificates;
undef $Store;



my $Content = '';

open FileToSign, $DocName;
while (<FileToSign>)
{
$Content .= $_;
}
close FileToSign;


my $MyMail = MIME::Entity->build( From => '[email protected]',
To => '[email protected]',
Subject => "Test crypto",
#Type => 'multipart/signed;',
#Protocol => '"application/x-pkcs7-signature" ; micalg=sha1;'
Type => 'multipart/signed; protocol="application/pkcs7-signature"',
Protocol => '"application/pkcs7-signature"',
);



$MyMail->attach(
Data => $Content,
Type => "Content-Type: text/plain;",
Encoding => "base64",
Filename =>"REGISTRY.TXT",
Disposition => "attachment;",
);


my $ContentToSign = $MyMail->parts(0)->stringify;

$ContentToSign =~ s/\n/\r\n/g;

$SignedData->{'Content'} = Variant(VT_UI1, $ContentToSign);


my $Message = $SignedData->Sign($Signer, 1, CAPICOM_ENCODE_BASE64);

$SignedData->Verify($Message, 1, 1);

$MyMail->attach(
Data => decode_base64($Message),
Type => 'application/pkcs7-signature',
Name => 'smime.p7s',
Disposition => 'attachment',
Filename => 'smime.p7s',
Description => 'S/MIME Cryptographic Signature',
Encoding => "base64",
);

my $Message1=  $MyMail->stringify;
$Message1 = $EncryptedData->Encrypt;
print $Message1 ;

my $smtp = Net::SMTP->new('smtp.test.com',Timeout => 30);
$smtp->mail('[email protected]');
$smtp->recipient('[email protected]');
$smtp->data;
$smtp->datasend($MyMail->stringify);
$smtp->dataend;
$smtp->close;

PM MAIL   Вверх
yodgik
Дата 22.1.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



подскажите что может быть когда пытаюсь вызвать его через форму в apache пише 

Can't call method "Count" on an undefined value at
подскажите куда рыть ???  smile 
PM MAIL   Вверх
Nab
Дата 23.1.2007, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



Ну скорее всего Count был вызван для неопределенного объекта...

Сначала стоит проверить в 62 строчке:
Код

die $! unless (my $Certificates = $Store->Certificates);




--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
yodgik
Дата 23.1.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



а не подскажете почему когда через perl aa.pl вызываю то всё работает ? 
PM MAIL   Вверх
Nab
Дата 23.1.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



Ну если вызываете без параметров, то это не должно ни на что особенно влиять, другое дело, что если у вас несколько версий перла установлено, и вызываются разные....


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
yodgik
Дата 24.1.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



с предыдущем вопросом разобрался но появился ещё один 
есть такой код 

Код

my $Mailencrypt ='From: <[email protected]>
To: <[email protected]>
Subject: Test crypto.time()
MIME-Version: 1.0
Content-Type: application/x-pkcs7-mime;
smime-type=enveloped-data; boundary="boundary";
Name = "smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; FileName = "smime.p7s"';


как можно в поле From и To вставить переменные или можно как то подругому обойтись.

PM MAIL   Вверх
nitr
Дата 24.1.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



как пример:
Код
#!perl
my $from = '<[email protected]>';
my $to = '<[email protected]>';
my $Mailencrypt = qq(From: $from
To: $to
Subject: Test crypto.time()
MIME-Version: 1.0
Content-Type: application/x-pkcs7-mime;
smime-type=enveloped-data; boundary="boundary";
Name = "smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; FileName = "smime.p7s");
print $Mailencrypt;



--------------------
PM   Вверх
poltora
Дата 28.4.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



вы нашли решение своей задачи?
может быть эта проблема аналогична вашей и вы сможете подсказать выход из тупика...

ниже представлен тестовый пример, который подписывает тестовые данные и тут же проверяет подпись.

проблема в том, что подпись является невалидной.

Код

my $data = '1234567890';
my $user = '18b729e9d7485c1b12964e2ef3fba8a8'; # идентификатор юзера, по которому находится сертияикат (ниже)


# ищем сертификат
my $Store = Win32::OLE->new('CAPICOM.Store') or die "Cannot start CAPICOM.Store";
$Store->Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY );

my $Certificates = $Store->Certificates;
my $certificate;
for ( my $i = 1 ; $i <= $Certificates->Count() ; $i++ ) {
    my $Certificate = $Certificates->Item($i);
    if ( hashSubjectName( $Certificate->SubjectName() ) eq $user ) {
        $certificate = $Certificate;
        last;
    }
}
print $certificate->SubjectName(); # да, наш сертификат, имеет приватный ключ $Certificate->HasPrivateKey()

# подписываем выше найденным сертификатом
my $Signer = Win32::OLE->new('CAPICOM.Signer') or die "Cannot start CAPICOM.Signer";
$Signer->LetProperty( 'Certificate', $certificate );

my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); # или $SignedData->Content($data) ?
my $signature = $SignedData->Sign( $Signer, 1, CAPICOM_ENCODE_BASE64 );

print $signature; # что-то есть

# проверяем подпись
my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); #или $SignedData->Content($data) ?

print $SignedData->Verify( $signature, 1, CAPICOM_VERIFY_SIGNATURE_ONLY );
# возвращается undef, что значает, что подпись неверна (и так ли это?)



если вывести все переменные сертификата из подписи(!) - 
$SignedData->Certificates(1);
- то окажется, что он похож на исходный сертификатор (которым подписывали), НО он не имеет приватного ключа ($Certificate->HasPrivateKey())

в каком месте я допускаю ошибку?

имеет смысл использовать CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE ?
заранее спасибо.

Это сообщение отредактировал(а) poltora - 28.4.2008, 17:56
PM MAIL WWW   Вверх
shamber
Дата 28.4.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



poltora
используйте тег КОД(CODE)
Так другим будет удобнее  вам помогать

Это сообщение отредактировал(а) shamber - 28.4.2008, 17:53
PM MAIL Jabber   Вверх
poltora
Дата 28.4.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Цитата(poltora @ 28.4.2008,  15:06)
вы нашли решение своей задачи?
может быть эта проблема аналогична вашей и вы сможете подсказать выход из тупика...

ниже представлен тестовый пример, который подписывает тестовые данные и тут же проверяет подпись.

проблема в том, что подпись является невалидной.

Код

my $data = '1234567890';
my $user = '18b729e9d7485c1b12964e2ef3fba8a8'; # идентификатор юзера, по которому находится сертияикат (ниже)


# ищем сертификат
my $Store = Win32::OLE->new('CAPICOM.Store') or die "Cannot start CAPICOM.Store";
$Store->Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY );

my $Certificates = $Store->Certificates;
my $certificate;
for ( my $i = 1 ; $i <= $Certificates->Count() ; $i++ ) {
    my $Certificate = $Certificates->Item($i);
    if ( hashSubjectName( $Certificate->SubjectName() ) eq $user ) {
        $certificate = $Certificate;
        last;
    }
}
print $certificate->SubjectName(); # да, наш сертификат, имеет приватный ключ $Certificate->HasPrivateKey()

# подписываем выше найденным сертификатом
my $Signer = Win32::OLE->new('CAPICOM.Signer') or die "Cannot start CAPICOM.Signer";
$Signer->LetProperty( 'Certificate', $certificate );

my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); # или $SignedData->Content($data) ?
my $signature = $SignedData->Sign( $Signer, 1, CAPICOM_ENCODE_BASE64 );

print $signature; # что-то есть

# проверяем подпись
my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); #или $SignedData->Content($data) ?

print $SignedData->Verify( $signature, 1, CAPICOM_VERIFY_SIGNATURE_ONLY );
# возвращается undef, что значает, что подпись неверна (и так ли это?)



если вывести все переменные сертификата из подписи(!) - 
$SignedData->Certificates(1);
- то окажется, что он похож на исходный сертификатор (которым подписывали), НО он не имеет приватного ключа ($Certificate->HasPrivateKey())

в каком месте я допускаю ошибку?

имеет смысл использовать CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE ?
заранее спасибо.

любопытно, что аналогичный скрипт на javascript (клиент и сервер, в данном случае - одна физическая машина) - прекрасно работает. и к томуже намного(!) быстрее - доли секунды.
на perl занимает несколько десятков секунд.

вот пример javascript:


Код

<object id="oCAPICOM"
    codeBase="http://download.microsoft.com/download/E/1/8/E18ED994-8005-4377-A7D7-0A8E13025B94/capicom.cab#version=2,0,0,3"
    classid="clsid:A996E48C-D3DC-4244-89F7-AFA33EC60679"
    VIEWASTEXT>
</object>

<script>
var CAPICOM_STORE_OPEN_READ_ONLY = 0;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;

var CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;
var CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME = 1;
var CAPICOM_VERIFY_SIGNATURE_ONLY = 0;

var Now = new Date();

var CertStore = new ActiveXObject("CAPICOM.Store");
var Signer = new ActiveXObject("CAPICOM.Signer");
var SignedAuth = new ActiveXObject("CAPICOM.SignedData");

CertStore.Open(CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM_STORE_OPEN_READ_ONLY);
Signer.Certificate = CertStore.Certificates.Item(1); // 1-ый из личного хранилища сертификатов, поскольку мы работаем на стороне клиента

SignedAuth.Content = "бла бла бла"; // текст документа, который будем подписывать

document.write("text:\r\n" + SignedAuth.Content + "\r\n\r\n");
document.write("signing... ");

try {
    var Signature = SignedAuth.Sign(Signer, true); // подписываем, получаем подпись Signature на основе документа и сертификата
} catch (e) {
    document.write("failed: " + e.message + "\r\n\r\n"); // ошибка
}

document.write("done\r\n\r\n");
document.write("signature:\r\n" + Signature + "\r\n");

document.write("-------------------------------------------------------------------\r\n\r\n");

// Проверка подписи...
var SData = new ActiveXObject("CAPICOM.SignedData");
SData.Content = "бла бла бла"; // текст проверяемого документа

document.write("text:\r\n" + SData.Content + "\r\n\r\n");
document.write("signature:\r\n" + Signature + "\r\n");
document.write("verifying... ");

try {
    SData.Verify(Signature, true, CAPICOM_VERIFY_SIGNATURE_ONLY);
    document.write("done\r\n\r\n");
    var Certificate=SData.Certificates(1);
    var CertOwner=Certificate.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME);
    document.write("signer: " + CertOwner);
} catch (e) {
    document.write("failed: " + e.message + "\r\n\r\n"); // либо подпись либо документ липовые
}

</script>




PM MAIL WWW   Вверх
yodgik1
Дата 26.6.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Скажи что за my $user по чему ищешь сертификат ?
и получилось ли у тебя проверить подпись ? 
Код

my $data = '1234567890';
my $user = '18b729e9d7485c1b12964e2ef3fba8a8'; # идентификатор юзера, по которому находится сертияикат (ниже)


# ищем сертификат
my $Store = Win32::OLE->new('CAPICOM.Store') or die "Cannot start CAPICOM.Store";
$Store->Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY );

my $Certificates = $Store->Certificates;
my $certificate;
for ( my $i = 1 ; $i <= $Certificates->Count() ; $i++ ) {
    my $Certificate = $Certificates->Item($i);
    if ( hashSubjectName( $Certificate->SubjectName() ) eq $user ) {
        $certificate = $Certificate;
        last;
    }
}
print $certificate->SubjectName(); # да, наш сертификат, имеет приватный ключ $Certificate->HasPrivateKey()

# подписываем выше найденным сертификатом
my $Signer = Win32::OLE->new('CAPICOM.Signer') or die "Cannot start CAPICOM.Signer";
$Signer->LetProperty( 'Certificate', $certificate );

my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); # или $SignedData->Content($data) ?
my $signature = $SignedData->Sign( $Signer, 1, CAPICOM_ENCODE_BASE64 );

print $signature; # что-то есть

# проверяем подпись
my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data ); #или $SignedData->Content($data) ?

print $SignedData->Verify( $signature, 1, CAPICOM_VERIFY_SIGNATURE_ONLY );
# возвращается undef, что значает, что подпись неверна (и так ли это?)

PM MAIL   Вверх
nitr
Дата 26.6.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



yodgik1, последнее посещение данного человека 
Цитата

Последнее посещение: 29.4.2008

наврядли ответит...

Это сообщение отредактировал(а) nitr - 26.6.2008, 08:54


--------------------
PM   Вверх
poltora
Дата 26.6.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Цитата(yodgik1 @ 26.6.2008,  08:20)
Скажи что за my $user по чему ищешь сертификат ?
и получилось ли у тебя проверить подпись ? 

да, получилось проверить подпись.

$user - это некоторый идентификатор, по которому я ищу сертификат (md5-хеш некоторых значений сертификата)

Добавлено через 2 минуты и 45 секунд
Цитата(nitr @ 26.6.2008,  08:53)
yodgik1, последнее посещение данного человека 
Цитата

Последнее посещение: 29.4.2008

наврядли ответит...

подписка на темы - великая вещь smile
PM MAIL WWW   Вверх
yodgik1
Дата 26.6.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



а можешь показать код ? 
PM MAIL   Вверх
poltora
Дата 26.6.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Цитата(yodgik1 @ 26.6.2008,  12:34)
а можешь показать код ?

код приводил:

http://forum.vingrad.ru/index.php?showtopi...t&p=1495286
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.