В 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?