2016-11-13 1 views
2

Я использую CryptoJS для дешифрования шифрования с моего веб-сервера (используйте php и AES-128-ECB), но я не могу получить правильный wordArray, длина слишком длинная. Вот мой тестовый код:СловоArray, которое выдает CryptoJS.AES.decrypt() с помощью 0x8080808

var pwd = "abcdefghijklmnop"; 
var words = [0x86C5464, 0x7335231]; 
var plain_array= CryptoJS.lib.WordArray.create(words); 
var base64_pwd = CryptoJS.enc.Utf8.parse(pwd).toString(CryptoJS.enc.Base64); 
var pwd_key = CryptoJS.enc.Base64.parse(base64_pwd); 
var encryption = AES.encrypt(plain_array,pwd_key, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(); 
var decrypt = AES.decrypt(encryption,pwd_key, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); 

And The расшифровывать является:

decrypt == { 
    sigBytes : 8, 
    words : [0x86C5464, 0x7335231, 0x8080808, 0x8080808]  
} 

Почему decrypt.words плюсовали 0x8080808? Как я могу получить правильную длину wordArray?

Заранее спасибо.

ответ

0

AES является блочным шифрованием и требует ввода блоков блоков размером, 16 байтов для AES. Если данные, подлежащие зашифровке, не являются четными кратными байтам заполнения блока, их необходимо добавить. PKCS # 7 padding - это обычный режим заполнения. Большинство библиотек AES поддерживают режим заполнения PKCS # 7, который добавляет дополнение к шифрованию и удаляет заполнение при расшифровке.

В этом случае было добавлено 8-байтное значение paddig и это восемь байтов значения 0x08.

См. PKCS#7 padding.

Примечание: не используйте режим ECB, он небезопасен, см. ECB mode, прокрутите вниз до пингвина. Вместо этого используйте режим CBC со случайным IV, просто префикс зашифрованных данных с IV для использования в расшифровке.

+0

Спасибо! Я больше не буду использовать ЕЦБ. – Kinch