Node.JSencryption解密不起作用

我有一个function,如:

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+"]"); 

其中输出一个短的encryptionstring。

但是当我尝试用下面的方法来解决

 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+"]"); 

它返回一个空string(即“从上面编码的string=> []”)

我最初认为编码方法可能是错误的,但input只能是一个string的数字,结果是相同的ASCII和UTF8。

我对createDecipheriv的理解是它实际上是createCipheriv的镜像,它应该返回被解密的string。 这是不正确的? 如果是的话,string应该如何解密?

已解决

.final()对编码和解码string都是必需的。 我们已经在别处使用了它,而我的理解是错误的。

更新函数不返回任何东西。 你应该使用final来获取你之后的string。

你想要做一些事情:

 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');