2017-07-25 1 views
0

Le code suivant fonctionne dans le nœud 0.12.18 (remplacez Buffer.from-new Buffer), mais il ne fonctionne pas avec la dernière version de noeud (7.10.0)le module Crypto ne fonctionne pas avec le dernier noeud 7.10

Quelqu'un peut-il expliquer moi pourquoi ça arrive? Tout est manquant dans le code ci-dessous.

/* 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

J'utilise v8.1.2 Node et je viens de tester votre code. Ça fonctionne bien. – Burdy

+0

@Burdy ne génère pas d'erreurs, mais les données décryptées ne sont pas correctes. – robertklep

Répondre

1

Node.js v6 introduit quelques changements rétrogrades incompatibles à crypto qui en sont la cause.

J'ai documenté la raison exacte dans this answer, mais parce que cette question est liée au hachage, je suis réticent à fermer votre question en tant que doublon.

Le correctif est similaire, bien que (vous devez passer binary comme encodage pour decipher.update(), sinon il sera par défaut utf-8):

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

l'ai eu !! :) Je l'ai résolu. Merci mec...... :) –