問題描述
在 node.js 中,我使用內置函數來加密數據:
In node.js, I use the build in function to encrypt data like that:
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==
the output (encrypted text) is: OnNINwXf6U8XmlgKJj48iA==
然后我在 PHP 中使用解密:
Then I use decrypt it in 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 .. 都失敗了.
I will get some funny characters, which I can't decrypted it. I tried with/without base64_decode or MCRYPT_RIJNDAEL_128.. all fail.
然后我檢查了PHP中的加密方式,它看起來與node.js的輸出非常不同.
Then I check how the encryption in PHP, it looks very different from the output from node.js.
$text = "Yes";
$key = "123456";
$eText = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC);
echo "Encrypted: $eText
";
echo "base64: " . base64_encode($eText) . "
";
$dtext1 = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $eText, MCRYPT_MODE_CBC);
echo "Decrypted: $dtext1
";
它可以加密和解密.加密數據為:njCE/fk3pLD1/JfiQuyVa6w5H+Qb/utBIT3m7LAcetM=
It can encrypt and decrypt. and the encrypted data is : njCE/fk3pLD1/JfiQuyVa6w5H+Qb/utBIT3m7LAcetM=
這與 node.js 的輸出非常不同,請告知我如何在 node.js & 之間進行加密和解密.php.ini謝謝.:)
which is very different from the output from node.js please advise how I can encrypt and decrypt between node.js & php. thanks. :)
@Mel 這是我在 PHP 中所擁有的:
@Mel here is what I have in 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
";
echo "base64: " . base64_encode($eText) . "
";
/* 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) . "
";
然而,它仍然不起作用.
However, it still doesn't work.
PHP 中加密的 base 64 為:80022AGM4/4qQtiGU5oJDQ==nodejs中加密的base 64為:EoYRm5SCK7EPe847CwkffQ==
The encrypted base 64 in PHP is: 80022AGM4/4qQtiGU5oJDQ== The encrypted base 64 in nodejs is: EoYRm5SCK7EPe847CwkffQ==
因此,我無法在 PHP 中解密 nodejs 之一.
thus, i can't decrypt the nodejs one in PHP.
不知道是不是因為nodejs不需要$iv?
I wonder if it is because nodejs doesn't require $iv?
推薦答案
晚了七個月,但我也在為此苦苦掙扎,并找到了解決方案.顯然,PHP 用零字節填充輸入以使其大小成為塊大小的倍數.例如,使用 AES-128,14 字節輸入contrabassists"將填充兩個零字節,如下所示:
Seven months late, but I was struggling with this as well, and found a solution. Apparently, PHP pads the input with zero bytes to make its size a multiple of the block size. For example, using AES-128, the 14 byte input "contrabassists" will be padded with two zero bytes, like this:
"contrabassists
主站蜘蛛池模板:
久久久久久国产精品
|
a级毛片基地
|
国产午夜精品一区二区三区在线观看
|
97国产在线观看
|
久久精品国产亚洲
|
亚洲精品www久久久久久广东
|
国产一级毛片视频
|
偷拍自拍在线观看
|
久久在线看
|
一级全黄视频
|
天天玩天天操天天干
|
国产美女精品视频
|
欧美一级特黄aaa大片在线观看
|
一区二区三区精品在线视频
|
国产精品久久久久久久久久三级
|
h小视频|
日韩成人av在线
|
天天操天天摸天天干
|
久久精品久久久
|
激情免费视频
|
中文字幕综合
|
一区二区三区四区国产
|
国产午夜精品一区二区三区嫩草
|
亚洲欧美在线视频
|
国产精品亚洲精品久久
|
日本高清中文字幕
|
一区二区欧美在线
|
日韩中文在线观看
|
久久久久国产一区二区
|
日韩一区中文字幕
|
青青草一区
|
超碰男人天堂
|
亚洲精品乱码久久久久v最新版
|
国精日本亚洲欧州国产中文久久
|
国产一区二区三区四区三区四
|
亚洲精品福利视频
|
国产一区二
|
97色伦网
|
www.se91|
精品欧美一区二区三区
|
黄色网址在线免费观看
|