2013-04-04 71 views
1

为什么下面的代码抛出了一个DecipherFinal错误密码 -错误密码破译

var crypto = require('crypto'); 
    c=new Date; 
    x= (c.getTime()+"."+c.getMilliseconds()).toString()+".uIn"; 
    key = 'sevsolut' 
     , plaintext = x 
     , cipher = crypto.createCipher('aes-256-cbc', key) 
     , decipher = crypto.createDecipher('aes-256-cbc', key); 
    cipher.update(plaintext, 'utf8', 'base64'); 
    var encryptedPassword = cipher.final('base64') 

    decipher.update(encryptedPassword, 'base64', 'utf8'); 
    var decryptedPassword = decipher.final('utf8'); 

    console.log('encrypted :', encryptedPassword); 
    console.log('decrypted :', decryptedPassword); 
+0

'C =新Date'应'c = new Date()' – pfried 2013-04-04 08:23:30

+0

你为什么要加密密码而不是散列它们? – Mchl 2013-04-04 08:38:18

+0

只要你不需要传递参数,在JS中实例化对象时@pfried括号是可选的。 – robertklep 2013-04-04 08:53:59

回答

2

你需要从更新的输出:

var crypto = require('crypto'); 
c=new Date(); 
x= (c.getTime()+"."+c.getMilliseconds()).toString()+".uIn"; 
key = "sevsolut" 
     , plaintext = x 
     , cipher = crypto.createCipher('aes-256-cbc', key) 
     , decipher = crypto.createDecipher('aes-256-cbc', key); 
var encryptedPassword = cipher.update(plaintext, 'utf8', 'base64'); 
encryptedPassword += cipher.final('base64') 

var decryptedPassword = decipher.update(encryptedPassword, 'base64', 'utf8'); 
decryptedPassword += decipher.final('utf8'); 

console.log('encrypted :', encryptedPassword); 
console.log('decrypted :', decryptedPassword); 
+0

@ chris..it工作完美:) ..however想要指出一件事..有问题的代码似乎完美地适用于特定长度的字符串(尝试使用一个简单的小字符串)..只有当它超过一定的长度时,我猜我们必须添加更新步骤。你可以点亮它吗? – digster 2013-04-04 10:38:00

+0

不确定你的意思。更新返回加密的内容,并且在流式传输时可以使用新数据多次调用 - 最终返回所有剩余的加密内容。 – laktak 2013-04-04 11:03:36

+0

我的意思是说使用x =“简单”作为明文输入..然后问题中的代码完美地工作..但是如果x =一些大字符串..然后问题中的代码失败,我们必须根据您的例子.... – digster 2013-04-04 12:42:18