2017-07-25 67 views
0

下面的代码片段在节点0.12.18工作最新节点工作(更换Buffer.fromnew Buffer),但它不能与最新版本的节点工作(7.10.0)加密模块没有与7.10

任何人可以解释我为什么会这样?以下代码中缺少任何内容。

/* Node.js */ 
var crypto = require('crypto'); 

var algorithm = 'aes-256-ctr'; 

var data = "Dhanet-Kalan-Chittorgarh" 
var encryption_key = "VHUz1dxrhsowwEYGqUnPcE4wvAyz7Vmb"; 

var encryption_data = _encrypt() 

console.log('data for encryption :: ' + data); 
console.log('encrypted data :: ' + encryption_data); 
console.log('decrypted data :: ' + _decrypt(encryption_data)); 

function _decrypt(_encryption_data){ 

    var decipher, dec, chunks, itr_str; 

    // remove itr string 
    itr_str = _encryption_data.substring(_encryption_data.length-24); 
    _encryption_data = _encryption_data.substring(0, _encryption_data.length-24); 

    decipher = crypto.createDecipheriv(algorithm, encryption_key, Buffer.from(itr_str, "base64")); 
    chunks = [] 
    chunks.push(decipher.update(Buffer.from(_encryption_data, "base64").toString("binary"))); 
    chunks.push(decipher.final('binary')); 
    dec = chunks.join(""); 
    dec = Buffer.from(dec, "binary").toString("utf-8"); 

    return dec; 
} 


function _encrypt(){ 

    //random alpha-numeric string 
    var itr_str = Buffer.from(randomString(16)).toString('base64') ; // "3V5eo6XrkTtDFMz2QrF3og=="; 

    var cipher = crypto.createCipheriv(algorithm, encryption_key, Buffer.from(itr_str, "base64")); 
    var chunks = []; 
    chunks.push(cipher.update(Buffer.from(data), 'utf8', 'base64')); 
    chunks.push(cipher.final('base64')); 

    var crypted = chunks.join(''); 
    crypted = crypted.concat(itr_str); 

    return crypted; 
} 

function randomString(len, an) 
{ 
    an = an&&an.toLowerCase(); 
    var str="", i=0, min=an=="a"?10:0, max=an=="n"?10:62; 
    for(;i++<len;){ 
     var r = Math.random()*(max-min)+min <<0; 
     str += String.fromCharCode(r+=r>9?r<36?55:61:48); 
    } 
    return str; 
} 
+0

我使用节点V8.1.2和我刚才测试了你的代码。它工作正常。 – Burdy

+0

@Burdy它不会产生错误,但解密的数据不正确。 – robertklep

回答

1

Node.js的V6介绍了导致此部分后向兼容的改变crypto

我已经在this answer中记录了确切的原因,但因为那个问题与哈希有关,所以我不愿意将你的问题作为一个副本来关闭。

解决方法是类似的,但(你需要通过binary作为编码decipher.update(),否则将默认为utf-8):

chunks.push(decipher.update(Buffer.from(_encryption_data, "base64"), 'binary')); 
+0

明白了! :)我解决了它。谢啦...... :) –