2011-08-24 22 views
1

當解密十六進制編碼的AES128輸出時,Node.js奇怪地給了我錯誤的輸出。Node.js:錯誤的加密輸出

function decrypt_data(data, key, iv) 
{ 
    var dc = crypto.createDecipheriv('aes-128-cbc', hex_to_str(key), hex_to_str(iv)); 
    var res = dc.update(data, 'hex', 'utf8'); 
    res += dc.final('utf8'); 

    console.log(res); 

    return res; 
} 

這個函數看起來完全沒問題,所有的測試都通過了。但是當我從真正的節點服務器調用它時,它會返回損壞的輸出。

消息的尾部是好的,但前32個符號是完整的垃圾。類似這樣的:

�8���ro�&����AMD Accelerated Parallel Processing" : [ "Cayman", "Cayman", "AMD Phenom(tm) II X2 555 Processor" ] }, "request" : "hello", "version" : 1 } 

無論它需要什麼輸入,在前32個字節中返回值總是錯誤的。

+0

它看起來像你的初始化向量是錯誤的。檢查這個。 –

+0

是的,IV有問題。感謝大家。 – elmigranto

+1

如果您認爲足夠好,請接受rossum的回答(複選標記按鈕)。 –

回答

2

您的代碼正在使用CBC模式。在這種模式下,輸出的初始塊通常會由於使用錯誤的IV而導致損壞。仔細檢查你使用的是正好是相同的IV進行加密和解密。這意味着要逐字節地檢查它。