2011-04-01 89 views
3

我試圖在零填充的CBC模式下執行AES加密。有誰知道如果aesSlow支持零填充?根據我對代碼的理解,它不會,如果是這樣的話;誰能告訴我爲什麼?slowAES是否允許/支持零填充?

我正在使用需要此加密方法的第三方API。

jsfiddle.net/NMATS/2是我目前的POC。一旦它被調試,我會一直在努力。此外,輸入是相似的,但不同的安全性。

乾杯, 丹尼斯

回答

1

看起來你是正確的。它似乎使用PKCS7。您的選項則是:

  1. 與填充它0的自己,丟棄密文
  2. 編輯代碼的最後一塊使填充功能做到零填充(提防的許可限制 - 我不敢看許可證)

至於爲什麼,我猜他們只是沒有必要去做或者沒有時間去實現它。

如果使用選項1,則PKCS7將添加一個0x10字節的完整塊,如果您的明文已經是塊大小的倍數。因此,您可以使用0x00字節來填充您的明文,使其成爲塊大小的倍數並對其進行加密。然後你會丟棄密文的最後128位(這只是0xFF加密的16個字節)。你會得到一個兼容的結果。

如果使用選項2,我不確定您正在使用哪個實現,但我認爲它們都足夠簡單。

下面是Javascript實現填充功能:

padBytesIn: function(data) { 
      var len = data.length; 
      var padByte = 16 - (len % 16); 
      for (var i = 0; i < padByte; i++) { 
        data.push(padByte); 
      } 
    }, 

這裏是你將它更改爲:

padBytesIn: function(data) { 
      var len = data.length; 
      if(len % 16 > 0){ 
       var padLen = 16 - (len % 16); 
       for (var i = 0; i < padLen; i++) { 
         data.push(0); 
       } 
      } 
    }, 
+0

修正:你添加16個字節的值0x10的,否則你是正確的。 (或15個字節的值爲0xF,...高達0x1的一個字節;如果你沒有填充0 mod 16個字節0) – 2011-04-01 17:52:26

+0

Sry Henno,你失去了我嗎?代碼更改會是什麼?我有我的示例嘗試@ http://jsfiddle.net/NMATS/1/這將在稍後移動到節點,密鑰,iv和成員訪問都是類似的,但對安全性不同。 – 2011-04-01 23:10:47

+0

@Henno Brandsma請你詳細說明一下嗎?我很確定上面的所有內容都是正確的。我只是再看一遍。你在談論選項1還是選項2? @Denis Hoctor - 看起來好像適合你,是嗎? – Luke 2011-04-02 00:19:52