我的功能如下:
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()是编码和解码字符串所必需的。我们在其他地方没有使用它,我的理解是错误的。
答案 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');