2014-01-11 1 views
2

Здравствуйте, я использую следующую кодовую фразу: «test». Это создает ключ AES: «9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08» IV 0.Google CryptoJS AES результат слишком длинный на 1 блок

В качестве теста я пытался шифрует этот ключ. Поскольку я всегда буду использовать эту программу с 256 битами, я вырезаю зашифрованный шифр после 64 шестнадцатеричных символов (256 бит).

Однако, когда я расшифровываю этот зашифрованный текст, мне не хватает последних 16 символов (128 бит) моего ключа.

Это размер одного блока AES, но мой ключ - 256 бит, поэтому мне кажется странным.

Мой вопрос: Почему мой результат AES слишком длинный? И: Могу ли я сделать это правильно, так что его 64 символа?

(CryptoJS является криптография библиотека Google для JavaScript.)

function go(){ 
    var shakey = CryptoJS.SHA256(document.getElementById("t3").value); //Textbox key here. 
    var hash =CryptoJS.enc.Hex.parse(CryptoJS.enc.Hex.stringify(shakey)); 
    var key = CryptoJS.enc.Hex.stringify(hash); 
    var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000'); 

    var encHex = CryptoJS.enc.Hex.parse(document.getElementById("t1").value); 

    var encrypted = CryptoJS.AES.encrypt(encHex, hash, { iv: iv }); //Textbox input here. 

    var encObj = {ciphertext:CryptoJS.enc.Hex.parse(document.getElementById("t2").value)}; //Textbox decrypt here 

    var decrypted = CryptoJS.AES.decrypt(encObj, hash, { iv: iv}); 

    var encResult = (encrypted.ciphertext+"").length > 63 ? (encrypted.ciphertext+"").substring(0,64) : (encrypted.ciphertext+""); 

    document.getElementById("p1").innerHTML=encResult; 
    document.getElementById("p2").innerHTML=decrypted; 
} 
+1

Еще раз. Попробуйте отключить заполнение [с помощью параметра NoPadding] (https://code.google.com/p/crypto-js/#Block_Modes_and_Padding). – Reid

ответ

2

Отключить заполнение using the NoPadding option. По умолчанию используется дополнение PKCS # 7, которое будет всегда применять дополнение к открытому тексту перед шифрованием. В случае полного блока он выложит еще один полный блок, что сделает результат на один блок дольше, чем вы ожидали.

Смежные вопросы