2013-02-11 57 views
0

我的任務是在CBC模式下解密AES-128,因爲我必須加密十六進制字符串和密鑰(十六進制)。 我已經嘗試了簡單的代碼,如:如何解密十六進制字符串中的AES CBC模式?

function doDecrypt(){ 
    var encryptedData = "1d4c76364618b6efce62258353f89810" 
    var key = "11112222333344445555666677778888"; 

    encryptedData = CryptoJS.enc.Hex.parse(encryptedData); 
    key = CryptoJS.enc.Hex.parse(key); 

     var decrypted = CryptoJS.AES.decrypt(encryptedData, key); 
    alert(CryptoJS.enc.Hex.stringify(decrypted)); 
} 

結果我得到的只是一個空字陣列(在「decrpyted」),任何人都可以指出的是,在那裏我做錯嗎?

我是否需要其他信息,如iv,鹽或不是?

+1

您的數據和密鑰從哪裏來?關鍵看起來對我來說不是真的,它不是隻有64位而不是必需的128位?我相信,算法本身應該起作用,並且輸入可能是您的問題。 – MCL 2013-02-11 15:19:30

+0

對不起,我複製了錯誤的密鑰,它有128位 :11112222333344445555666677778888 – user2061637 2013-02-12 10:29:04

回答

3

「CBC模式下的AES-128」不是數據格式。沒有通用的方式來編寫加密數據以及所需的元數據。你需要知道你上傳的內容以及它是如何生成的。然後你可以在大多數情況下計算出如何在CryptoJS中實現它。尤其需要了解以下內容:

  • 什麼算法? 「AES-128」含糊不清。這可能意味着「128位密鑰大小的AES」,也可能意味着「128位大小的AES和其他密鑰大小的AES」。
  • 什麼樣的鑰匙尺寸(見上)
  • 什麼模式? (你已經回答了這個問題:這是CBC。)
  • 什麼是填充?最常見的是PKCS#7,但可能沒有填充。 (對於CBC模式,幾乎肯定是PKCS#7。)
  • 什麼是IV?總共有 CBC的IV。有時,IV被錯誤地設置爲NULL(這使得CBC不太安全)。有可能從密碼生成IV(這是OpenSSL的工作原理)。
  • 您是否擁有一把好鑰匙,一把不安全鑰匙或密碼。一個很好的密鑰是一系列隨機字節,即密鑰的大小。不安全的密鑰是當密碼被當作密鑰對待時(通過將人類鍵入的字母複製到密鑰緩衝區中)。這是瘋狂的不安全,但非常普遍。
  • 如果您有正確的密碼,那麼使用什麼KDF和參數將其轉換爲密鑰?例如,他們是否使用OpenSSL KDF或PBKDF2或bcrypt或scrypt?
  • 是否還有其他元數據,比如HMAC? (一HMAC需要安全的AES-CBC,沒有它,攻擊者可以在某些時候修改密文解密到所需的明文。)

當你有這些問題的答案,那麼你就可以制定出如何實施與CryptoJS。

+1

您還需要知道填充方案。 – vcsjones 2013-02-11 17:51:50

+1

謝謝。編輯。 – 2013-02-11 17:53:14

+0

+1,但是:AES-128在FIPS 197中已被定義爲具有128位密鑰的AES(即使Rijndael沒有,AES始終具有128位的塊大小)。 IV在CBC模式下永遠不能爲NULL並且必須存在;它可以包含16個字節,值爲0的AES(並且XOR'ing零的影響非常小)。 – 2013-02-11 20:33:44

相關問題