【发布时间】:2015-12-18 13:12:23
【问题描述】:
我有一条消息在存储到 MySQL 数据库之前使用 PHP 加密。
我需要能够使用 node.js/javascript 解密此消息。
在研究如何做到这一点时,我遇到了crypto 模块。我尝试使用它,但我遇到了以下错误
C:\Program Files\nodejs\node_modules\mysql\lib\protocol\Parser.js:82
throw err;
^
TypeError: Not a buffer
at TypeError (native)
at new Decipheriv (crypto.js:282:16)
at Object.Decipheriv (crypto.js:279:12)
at Query.<anonymous> (C:\Program Files\nodejs\modules\validator.js:76:27)
at Query._callback (C:\Program Files\nodejs\modules\dbconnect.js:46:14)
at Query.Sequence.end (C:\Program Files\nodejs\node_modules\mysql\lib\protoc
ol\sequences\Sequence.js:96:24)
at Query._handleFinalResultPacket (C:\Program Files\nodejs\node_modules\mysq
l\lib\protocol\sequences\Query.js:144:8)
at Query.EofPacket (C:\Program Files\nodejs\node_modules\mysql\lib\protocol\
sequences\Query.js:128:8)
at Protocol._parsePacket (C:\Program Files\nodejs\node_modules\mysql\lib\pro
tocol\Protocol.js:274:23)
at Parser.write (C:\Program Files\nodejs\node_modules\mysql\lib\protocol\Par
ser.js:77:12)
这就是我尝试使用加密模块解密消息的方式
var crypto = require('crypto');
var encryptedText = new Buffer(rows[0]['password'], 'base64');
var decipher = crypto.createDecipheriv('sha256', 'The encryption password', 32);
var decrypted = decipher.update(encryptedText, 'hex', 'utf8') + decipher.final('utf8');
console.log('My Pass: ' + decrypted);
这就是我使用 PHP 加密消息的方式
define('PHP_HASH_ALGORITHIM','sha256');
define('PHP_MCRYPT_CIPHERNAME','rijndael-256');
define('PHP_MCRYPT_MODE','ecb');
define('PHP_MCRYPT_KEY','The encryption password');
function encrypt($input, $textkey = PHP_MCRYPT_KEY) {
$securekey = hash(PHP_HASH_ALGORITHIM, $textkey, TRUE);
$iv = mcrypt_create_iv(32);
return base64_encode(mcrypt_encrypt(PHP_MCRYPT_CIPHERNAME, $securekey, $input, PHP_MCRYPT_MODE, $iv));
}
这就是我使用 PHP 解密消息的方式
function decrypt($input, $textkey = PHP_MCRYPT_KEY) {
$securekey = hash(PHP_HASH_ALGORITHIM, $textkey, TRUE);
$iv = mcrypt_create_iv(32);
return trim(mcrypt_decrypt(PHP_MCRYPT_CIPHERNAME, $securekey, base64_decode($input), PHP_MCRYPT_MODE, $iv));
}
如何使用加密正确解密消息?
【问题讨论】:
-
@BurninLeo 我在哪里可以找到 crypto.js 文件?
-
当我将 iv 值从 32 更改为此
var iv = new Buffer(32, 'binary');我收到此错误Error: Unknown cipher我不确定是否应该将数字 32 传递到那里 -
对不起,我看错了错误信息。根据nodejs.org/api/…,“key 和 iv 必须是‘二进制’编码的字符串或缓冲区。” - 即,在我看来,
32根本无效。
标签: javascript php node.js encryption rijndael