Node.js加密模块

时间:2013-04-25 19:45:43

标签: javascript node.js encryption cryptography node-crypto

我正在尝试使用crypto模块在node.js中实现加密。以下是我的代码片段:

var SECRET_KEY = "RANDOMKEY";
var crypto = require("crypto");
var MD5 = crypto.createHash("MD5");
MD5.update(SECRET_KEY, 'ucs2');
var hash = MD5.digest('binary');


var key = new Buffer(hash, 'binary');
var keyStart = new Buffer(8, 'binary');
key.copy(keyStart, 0, 0, 8);


var valueToEncrypt = new Buffer('password', 'utf-8').toString('binary');
var cipher = crypto.createCipheriv('des-cbc',keyStart, keyStart);
var cryptedPassword = cipher.update(valueToEncrypt, 'binary', 'base64');

cryptedPassword+= cipher.final('base64');

console.log(cryptedPassword);gives---> r4xhQ8T87z2FFkLOxkcnGg==

我应该回来的是 r4xhQ8T87z26w30I1vr9kA == 我不确定我在这里做错了什么。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

事实证明,它正在加密,您的预期值只包含密码后的"\r\n",此示例代码未提供此密码。

"r4xhQ8T87z2FFkLOxkcnGg=="解密为"password""r4xhQ8T87z26w30I1vr9kA=="解密为"password\r\n"

除此之外,你对编码感到有点疯狂。将所有内容保留为Buffer

更为简单
var SECRET_KEY = "RANDOMKEY";
var crypto = require("crypto");

var MD5 = crypto.createHash("MD5");
MD5.update(SECRET_KEY, 'ucs2');
var keyStart = MD5.digest().slice(0, 8);

var valueToEncrypt = 'password\r\n';
var cipher = crypto.createCipheriv('des-cbc', keyStart, keyStart);
var cryptedPassword = cipher.update(valueToEncrypt, 'utf8', 'base64') +
    cipher.final('base64');

console.log(cryptedPassword);