mcrypt

  • Автор темы Andrey_P
  • Дата начала

Andrey_P

Guest
mcrypt

Здвавствуйте all.

надо зашифровать строку на сервере, чтобы расшифровывалось с помощью PGP на клиенте. установлено win98se+apache2.0.46+php4.3.2(+extension php_mcrypt.dll)
вроде стоит всё отлично, нашёл следующий код в инете
PHP:
$algorithms = array(
        MCRYPT_BLOWFISH,
        MCRYPT_DES,
        MCRYPT_TripleDES,
        MCRYPT_ThreeWAY,
        MCRYPT_GOST,
        MCRYPT_CRYPT,
        MCRYPT_DES_COMPAT,
        MCRYPT_SAFER64,
        MCRYPT_SAFER128,
        MCRYPT_CAST128,
        MCRYPT_TEAN,
        MCRYPT_RC2,
        MCRYPT_TWOFISH,
        MCRYPT_TWOFISH128,
        MCRYPT_TWOFISH192,
        MCRYPT_TWOFISH256,
        MCRYPT_RC6,
        MCRYPT_IDEA
        );

$message = "Hello PHP world.";  // Message to be encrypted
$secret = "password";    // Secret key
        
for($i=0; $i<count($algorithms); $i++)
{
    // If this algorithms is available, $algorithms[$i] is an integer constant
    if (is_integer($algorithms[$i]))
    {
        print("<b>$algorithms[$i]: ".mcrypt_get_cipher_name($algorithms[$i]).":</b><br>");
    }
    else
    {
        print("<b>$algorithms[$i]</b> is not supported<br>");
        continue;
    }
    // Get the block size of the current algorithm
    $block_size = mcrypt_get_block_size($algorithms[$i]);

    // Create an initialization vector from device /dev/random
    $iv = mcrypt_create_iv($block_size, MCRYPT_DEV_RANDOM);

    // Encrypt the plaintext with $algorithms[$i]
    $encrypted = mcrypt_cbc($algorithms[$i], $secret, $message, MCRYPT_ENCRYPT, $iv);
    
    // Decrypt it again
    $unencrypted = mcrypt_cbc($algorithms[$i], $secret, $encrypted, MCRYPT_DECRYPT, $iv);    

    // Output plaintext and ciphertext
    print("Ciphertext: $encrypted<br>");
    print("Plaintext: $unencrypted<p>");    
}
почему-то на выходе получаю:
blowfish is not supported
des is not supported
tripledes is not supported
threeway is not supported
gost is not supported
crypt is not supported
MCRYPT_DES_COMPAT is not supported
safer-sk64 is not supported
safer-sk128 is not supported
MCRYPT_CAST128 is not supported
MCRYPT_TEAN is not supported
rc2 is not supported
twofish is not supported
MCRYPT_TWOFISH128 is not supported
MCRYPT_TWOFISH192 is not supported
MCRYPT_TWOFISH256 is not supported
rc6 is not supported
idea is not supported

получается что ни один тип шифрования библиотека не поддерживает, такого не бывает. Подскажите, пожалуйста, куда смотреть.
Заранее спасибо.
 

Andrey_P

Guest
Дык в том то и дело, что этот php_mcrypt.dll не подключается, на http://www.php.net/manual/en/ref.mcrypt.php есть специальная ссылка для win32 пользователей на дополнительную библиотеку, после установки которой вроде как всё должно работать.
В php.ini добавил строчки:
mcrypt.algorithms_dir = "C:\PHP\mcrypt\libmcrypt"
mcrypt.modes_dir = "C:\PHP\mcrypt\libmcrypt"
в этих папках файлы типа: rc2.dll, des.dll, rijndael-256.dll

Всё прогружается идеально, никаких ошибок не выдаёт. Почему тогда не работает 15-ый час себе голову ломаю. Может кто запускал под виндой?
 

Andrey_P

Guest
из phpinfi():
version >= 2.4.x

Supported ciphers: cast-128 cast-128 gost gost rijndael-128 rijndael-128 twofish twofish arcfour arcfour cast-256 cast-256 loki97 loki97 rijndael-192 rijndael-192 saferplus saferplus wake wake blowfish-compat blowfish-compat des des panama panama rijndael-256 rijndael-256 serpent serpent xtea xtea blowfish blowfish enigma enigma rc2 rc2 tripledes tripledes

Supported modes: cbc cfb ctr ecb ncfb nofb ofb stream
 

Кром

Новичок
Одну минуту, а что это вообще за код такой? Где ты его нашел?

По твоему что делает эта строка?
if (is_integer($algorithms[$i]))

Минута на размышление :)
 

Andrey_P

Guest
простите, наверно перегрев мазгов вышел, код из мана полностью работоспособный
 

deek

Новичок
> if (is_integer($algorithms[$i]))

видимо, проверяет, установлена ли такая константа. если да, то она является целым числом. если не установлена, то имя константы преобразовывается в строку.

2 Andrey_P: а readme.txt из скачаного архива читал?
 

Andrey_P

Guest
там не было архива:
http://physfac.bspu.secna.ru/home/wolf/phpsc/index.php?mode=show_file_source&dir=Cryptography&file=MCrypt.php
 

deek

Новичок
я имею в виду, readme.txt из того архива, на который сслыка с http://www.php.net/manual/en/ref.mcrypt.php

и еще, попробуй пример из man, скажи что он пишет:
<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o'clock at the secret place.";

$td = mcrypt_module_open ('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
mcrypt_generic_init ($td, $key, $iv);
$encrypted_data = mcrypt_generic ($td, $input);
mcrypt_generic_deinit ($td);
mcrypt_module_close ($td);

echo $encrypted_data;
?>

если еще поразмыслить над нелегкой судьбой шаманов, можно попробовать в php.ini, для mcrypt.algorithms_dir и mcrypt.modes_dir указать пути с двойными слешами.
 

Andrey_P

Guest
всё правильно пишет я думаю, а именно:
\єюк™П’бћ(v№FэaхFЛUіжз SдЗЪЦzЯщ5Qм<±_™-:Н

вот только pgp это читать напрочь отказывается
 

deek

Новичок
> вот только pgp это читать напрочь отказывается
ну, видимо он хочет, чтобы ты сделал над этой строкой bin2hex(). посмотри наконец уже в какой-нибудь пример, который твой pgp клиент формирует.

имхо, тебе нужно забыть про mcrypt extension, и использовать простой бинарник, который будет выдавать готовый pgp:

http://www.gnupg.org/(en)/download/index.html

вот так этим бинарником можно пользоватьтся:

http://alt-php-faq.org/local/65/
http://hotwired.lycos.com/webmonkey/programming/php/tutorials/tutorial1.html
 
Сверху