2014-01-14 3 views
0

Im 다음을 사용하여 sample. 내가 가진 문제는 해독 할 때이다 :node.js aes decipher.final 오류

var decrypted = decipher.update (edata, 'binary') + decipher.final ('binary');

디지털 엔벨로프 루틴 오류 : EVD_DecryptFinal_ex : 잘못된 최종 블록 길이. 필자는 수색했지만 어차피 알아낼 수있는 것 같습니다. 나는 node.js 만 암호화/암호 해독 코드를 참조합니다 :

function AES() 
{ 
} 

AES.prototype.encrypt256 = function(input, password, callback) 
{ 
    var m = crypto.createHash('md5'); 
    m.update(password) 
    var key = m.digest('hex'); 

    m = crypto.createHash('md5'); 
    m.update(password + key) 
    var iv = m.digest('hex'); 

    var data = new Buffer(input, 'utf8').toString('binary'); 

    var cipher = crypto.createCipheriv('aes-256-cbc', key, iv.slice(0,16)); 
    var encrypted = cipher.update(data, 'binary') + cipher.final('binary'); 
    var encoded = new Buffer(encrypted, 'binary').toString('base64'); 
    callback(encoded); 
} 

AES.prototype.decrypt256 = function(input, password, callback) 
{ 
    // Convert urlsafe base64 to normal base64 
    var input = input.replace(/\-/g, '+').replace(/_/g, '/'); 
    // Convert from base64 to binary string 
    var edata = new Buffer(input, 'base64').toString('binary') 

    // Create key from password 
    var m = crypto.createHash('md5'); 
    m.update(password) 
    var key = m.digest('hex'); 

    // Create iv from password and key 
    m = crypto.createHash('md5'); 
    m.update(password + key) 
    var iv = m.digest('hex'); 

    // Decipher encrypted data 
    var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv.slice(0,16)); 
    var decrypted = decipher.update(edata, 'binary') + decipher.final('binary'); 
    var plaintext = new Buffer(decrypted, 'binary').toString('utf8'); 

    callback(plaintext); 
} 


var data = "This is some test that I will use to remove"; 
var password = "test"; 
var aes = new AES(); 
aes.encrypt256(data, password, function(encrypted_data) 
{ 
    console.log("Encrypted=> " + encrypted_data); 

    aes.decrypt256(encrypted_data, password, function(decrypted_data) 
    { 
     console.log("Decrypted=> " + decrypted_data); 
    }); 
}); 

위대한 도움이됩니다.

답변

1

나는 그것을 얻을 수 있었다. 관심있는 사람을위한 코드는 다음과 같습니다.

var crypto = require("crypto"); 
function encrypt(text, password){ 

    var m = crypto.createHash('md5'); 
    m.update(password) 
    var key = m.digest('hex'); 
    m = crypto.createHash('md5'); 
    m.update(password + key) 
    var iv = m.digest('hex'); 

    var data = new Buffer(text, 'utf8').toString('binary'); 

    var cipher = crypto.createCipher('aes-256-cbc', key, iv.slice(0,16)); 

    var encrypted = cipher.update(data,'utf8','hex'); 
    encrypted += cipher.final('hex'); 
    var crypted = new Buffer(encrypted, 'binary').toString('base64'); 

    return crypted; 
} 

function decrypt(text, password){ 

    var m = crypto.createHash('md5'); 
    m.update(password) 
    var key = m.digest('hex'); 
    // Create iv from password and key 
    m = crypto.createHash('md5'); 
    m.update(password + key) 
    var iv = m.digest('hex'); 
    var input = text.replace(/\-/g, '+').replace(/_/g, '/'); 
    var edata = new Buffer(input, 'base64').toString('binary'); 

    var decipher = crypto.createDecipher('aes-256-cbc', key, iv.slice(0,16)); 

    var decrypted = decipher.update(edata,'hex','utf8'); 
    decrypted += decipher.final('utf8'); 
    var dec = new Buffer(decrypted, 'binary').toString('utf8'); 
    return dec; 
} 

var pass = 'test'; 
var hw = encrypt("hello world the is one of the best one eight 333 43345 45654654", pass); 
console.log(hw); 
var dd = decrypt(hw, pass); 
console.log(dd);