2016-05-17 43 views
7

aşağıdaki kod yükseltme sonra 5.7.0Geçersiz Anahtar Uzunluğu şifrelemek ve ödeme geçidi hizmete istekleri şifresini NodeJS 6

function Encrypt(plainText, workingKey) { 
    var m = crypto.createHash('md5'); 
    m.update(workingKey); 
    var key = m.digest('binary'); 
    var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f';  
    var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);  
    var encoded = cipher.update(plainText, 'utf8', 'hex'); 
    encoded += cipher.final('hex'); 
    return encoded; 
}; 


function Decrypt(encText, workingKey) { 
    var m = crypto.createHash('md5'); 
    m.update(workingKey) 
    var key = m.digest('binary'); 
    var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; 
    var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); 
    var decoded = decipher.update(encText, 'hex', 'utf8'); 
    decoded += decipher.final('utf8'); 
    return decoded; 
}; 

Ancak NodeJS 6.0 yükselttikten sonra Düğüm Js ile düzgün çalışır (ayrıca 6.1 denedik) Aşağıdaki hatayı alıyoruz.

Debug: internal, implementation, error 
Error: Uncaught error: Invalid key length 
at Error (native) 
at new Cipheriv (crypto.js:184:16) 
at Object.Cipheriv (crypto.js:182:12) 

Bizim anahtar uzunluğu daima 16 karakter (yani 128 bit) olmuştur ve yükseltme işleminden önce çalışıyordu. Bu sorun neden şimdi oluyor?

+0

6.x kararlı yapıdan uzaktır, kullanmak zorunludur? Şirketimizde 5.5.0 kullanıyoruz, 6.x de denedim, ama bir saat içinde geri dönmek zorunda kaldım. – libik

+2

Neden "ikili" dizeleri kullanıyorsunuz? Sadece bir Tampon kullanın ve onunla yapılmalı; '' ikili '' m.digest ('ikili') 'dan kaldırın. –

+0

@ Artjom-b. Çok teşekkür ederim. Ne önerdin işe yaradı. Neden çalıştığını açıklamak için yeterince nazik misiniz? – Anomaly211

cevap

6

Cevabını, birisine yardımcı olabileceği umuduyla gönderiyorum.

Sorun, anahtar için 'ikili' özetin kullanılmasından kaynaklanıyor gibi görünüyor. Çözüm, yalnızca özet işlevini çağırmak ve anahtarı yerine bir arabellek olarak depolamaktır.

sabit kod @ için

function Encrypt(plainText, workingKey) { 
    var m = crypto.createHash('md5'); 
    m.update(workingKey); 
    var key = m.digest(); 
    var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f';  
    var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);  
    var encoded = cipher.update(plainText, 'utf8', 'hex'); 
    encoded += cipher.final('hex'); 
    return encoded; 
}; 

olarak My teşekkür Artjom-b cevabını okur.

+1

Çözümü gönderdiğiniz için teşekkür ederiz. IV ile aynı sorun vardı. Benim durumumda istisna, IV uzunluğunun 16 bayt olmasına rağmen geçersiz olduğunu iddia etti. Bir ikili dizeden bir Tampon'a geçmek sorunu çözdü. – Michael

+0

Bu değişikliği yaptım ama şimdi ccavenue sunucusuna yeniden yönlendirildiğinde Hata 10001 gösteriliyor. – MegaMind