2017-06-08 30 views
1

當使用crypto js tripleDES加密時,我注意到所有要加密的字符串都是小長度的,例如「01」,「111」,「20」 5000021234567890000「,輸出不正確或不是我期望的值。 例如,對於這個「5000021234567890000」,我期待這樣的:「HctDaKc/U9avOwZMSS5mEi62kfojDHA4」,但我得到這個代替:HctDaKc/U9bNnFy6eZHqHj3SemorJxQMCrypto JS:TripleDES不能正確加密

這是我發現的代碼,並使用加密

let key = CryptoJS.MD5(enckey); 
key.words[4] = key.words[0]; 
key.words[5] = key.words[1]; 
let iv = CryptoJS.lib.WordArray.create(64/8); 
CryptoJS.TripleDES.encrypt("5000021234567890000", key, {iv: iv}); 

你的幫助會非常讚賞。

+0

不要使用3DES新的工作,它不再被認爲是安全的,而不是使用AES(高級加密標準) 。 – zaph

+0

謝謝,但它不是我的力量來改變加密方法,我只是簡單地遵循要求 –

+0

最好的猜測給一點代碼:一個實例使用CBC模式,另一個使用ECB模式,我經常看到IVs錯誤地提供了ECB模式。明確提供加密模式總是更好。此外,您似乎使用的是在大多數情況下已棄用的雙鍵3DES。 – zaph

回答

2

查看加密的數據,第一個塊匹配,而後面的兩個塊不匹配。

 
    HctDaKc/U9avOwZMSS5mEi62kfojDHA4 
    1DCB4368A73F53D6 AF3B064C492E6612 2EB691FA230C7038 

    HctDaKc/U9bNnFy6eZHqHj3SemorJxQM 
    1DCB4368A73F53D6 CD9C5CBA7991EA1E 3DD27A6A2B27140C 

IV大概都是0x00字節。

這表明一個正在使用ECB模式,另一個正在使用CBC模式。

請參閱Block cipher mode of operation,特別是ECB和CBC模式。

ECB模式獨立加密每個模塊,CBC模式使用要加密的數據執行前一個模塊的操作,第一個模塊執行IV操作。由於IV是全部0x00值,因此不會對第一個塊進行更改。

選項可以在加密器的創建中指定,您需要查看文檔頁面,祝您好運。

它看起來是這樣的:

encryptor = crypto.createCipheriv(mode, key, iv) 

其中mode是一個:'des-ede', 'des-ede-cbc', 'des-ede3', 'des-ede3-cbc', 'des3'

+0

謝謝,這引導我到解決方案 –