【问题标题】:node.js aes decipher.final errornode.js aes decipher.final 错误
【发布时间】:2014-01-14 17:28:52
【问题描述】:

我正在使用以下sample。我遇到的问题是解密时:

var 解密 = 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);
    });
});

任何帮助都很棒。

【问题讨论】:

    标签: node.js aes


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      有时它不起作用,但我所做的是我删除了 解密 += decipher.final('utf8');

      但如果它对你有用,请尝试尽可能多地运行你的代码

      所以不要使用 decipher.final()。

      只需在终端中记录您的文本。它会起作用的。

      您可以查看我的 GitHub 代码。加密和解密文件的简单方法。任何文件格式。

      https://github.com/1cornerstone/File-Encryptor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多