3
我試圖在零填充的CBC模式下執行AES加密。有誰知道如果aesSlow支持零填充?根據我對代碼的理解,它不會,如果是這樣的話;誰能告訴我爲什麼?slowAES是否允許/支持零填充?
我正在使用需要此加密方法的第三方API。
jsfiddle.net/NMATS/2是我目前的POC。一旦它被調試,我會一直在努力。此外,輸入是相似的,但不同的安全性。
乾杯, 丹尼斯
我試圖在零填充的CBC模式下執行AES加密。有誰知道如果aesSlow支持零填充?根據我對代碼的理解,它不會,如果是這樣的話;誰能告訴我爲什麼?slowAES是否允許/支持零填充?
我正在使用需要此加密方法的第三方API。
jsfiddle.net/NMATS/2是我目前的POC。一旦它被調試,我會一直在努力。此外,輸入是相似的,但不同的安全性。
乾杯, 丹尼斯
看起來你是正確的。它似乎使用PKCS7。您的選項則是:
至於爲什麼,我猜他們只是沒有必要去做或者沒有時間去實現它。
如果使用選項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);
}
}
},
修正:你添加16個字節的值0x10的,否則你是正確的。 (或15個字節的值爲0xF,...高達0x1的一個字節;如果你沒有填充0 mod 16個字節0) – 2011-04-01 17:52:26
Sry Henno,你失去了我嗎?代碼更改會是什麼?我有我的示例嘗試@ http://jsfiddle.net/NMATS/1/這將在稍後移動到節點,密鑰,iv和成員訪問都是類似的,但對安全性不同。 – 2011-04-01 23:10:47
@Henno Brandsma請你詳細說明一下嗎?我很確定上面的所有內容都是正確的。我只是再看一遍。你在談論選項1還是選項2? @Denis Hoctor - 看起來好像適合你,是嗎? – Luke 2011-04-02 00:19:52