Node.JS加密解密不起作用

时间:2014-08-22 13:25:51

标签: javascript node.js encryption

我的功能如下:

var Crypto = require('crypto');
var string_to_encode = "some number or string";
var encrypted_string = "";
var des_key = new Buffer("key string here", "base64");
var des_iv = new Buffer(0);
var des_encryption = Crypto.createCipheriv("DES-EDE3", des_key, des_iv);
    encrypted_string = des_encryption.update(string_to_encode, "utf8", "base64");
console.log(string_to_encode+" => ["+encrypted_string+"]");

哪个输出短加密字符串。

但是当我尝试用以下方法来解决这个问题时:

var Crypto = require('crypto');
var string_to_decode = "encrypted string from above";
var deciphered_string = "empty";
var des_key = new Buffer("key string here", "base64");
var des_iv = new Buffer(0);
var des_decryption = Crypto.createDecipheriv("DES-EDE3", des_key, des_iv);
    deciphered_string = des_decryption.update(string_to_decode, "base64", "utf8");
console.log(string_to_decode+" => ["+deciphered_string+"]");

它返回一个空字符串(即"上面编码的字符串=> []")

我最初认为编码方法可能有误,但输入只是一个数字作为字符串,结果与ascii和utf8相同。

我对createDecipheriv的理解是它实际上是createCipheriv的镜像,它应该返回解密的字符串。这不正确吗?如果是这样,该字符串应如何解密?

解决

.final()是编码和解码字符串所必需的。我们在其他地方没有使用它,我的理解是错误的。

1 个答案:

答案 0 :(得分:1)

更新功能不会返回任何内容。你应该使用final来获得你追求的字符串。

你想要做的事情是:

des_encryption.update(string_to_encode, "utf8", "base64");
encrypted_string = des_encryption.final('base64');

var des_encryption.update(encryptedPassword, 'base64', 'utf8');
deciphered_string = des_encryption.final('utf8');