AES encrypt in Node.js Decrypt in PHP. Fail.

В node.js я использую встроенную функцию для шифрования таких данных:

var text = "Yes";
var password = "123456";
var encrypt = crypto.createCipher('aes-256-cbc', password);
var encryptOutput1 = encrypt.update(text, 'base64', 'base64');
var encryptOutput2 = encrypt.final('base64');
var encryptedText = encryptOutput1 + encryptOutput2;

вывод (зашифрованный текст): OnNINwXf6U8XmlgKJj48iA ==

Затем я использую дешифровать его в PHP:

$encrypted = 'OnNINwXf6U8XmlgKJj48iA==';
(or $encrypted = base64_decode('OnNINwXf6U8XmlgKJj48iA==')  );
$dtext2 = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC);
echo "Decrypted: $dtext2";

Я получу несколько забавных персонажей, которые я не могу расшифровать. Я пробовал с / без base64_decode или MCRYPT_RIJNDAEL_128 .. все терпят неудачу.

Затем я проверяю, как шифрование в PHP, оно сильно отличается от вывода из node.js.

$text = "Yes";
    $key = "123456"; 


    $eText = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC);
    echo "Encrypted: $eText \n";
    echo "base64: " . base64_encode($eText) . " \n";

    $dtext1 = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $eText, MCRYPT_MODE_CBC);
    echo "Decrypted: $dtext1 \n\n";

Он может шифровать и дешифровать. а зашифрованные данные: njCE / fk3pLD1 / JfiQuyVa6w5H + Qb / utBIT3m7LAcetM =

, что сильно отличается от вывода из node.js, пожалуйста, посоветуйте, как я могу зашифровать и расшифровать между node.js и php. Спасибо. :)


@Mel вот что у меня в PHP:

$text = "Yes";

$key = "32BytesLongKey560123456789ABCDEF"; 
$iv =  "sixteenbyteslong";

/* Open the cipher */
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);

/* Encrypt data */
$eText = mcrypt_generic($td, $text);

echo "Encrypted Data: $eText \n";
echo "base64: " . base64_encode($eText) . " \n";

/* Terminate encryption handler */
mcrypt_generic_deinit($td);

/* Initialize encryption module for decryption */
mcrypt_generic_init($td, $key, $iv);

/* Decrypt encrypted string */
$dText = mdecrypt_generic($td, $eText);

/* Terminate decryption handle and close module */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

/* Show string */
echo trim($dText) . "\n";

Однако это все еще не работает.

Зашифрованная база 64 в PHP: 80022AGM4 / 4qQtiGU5oJDQ == Зашифрованная база 64 в nodejs: EoYRm5SCK7EPe847CwkffQ ==

, поэтому я не могу расшифровать nodejs в PHP.

Интересно, потому что nodejs не требует $ iv?

11
задан Nick Craver 20 May 2011 в 11:02
поделиться