好的,这是您要解决的问题:
将无填充js添加到您的源列表中:
http://crypto-js.googlepre.com/svn/tags/3.1/build/components/pad-nopadding.js
加密/解密时,请指定参数:
padding: CryptoJS.pad.NoPadding
CTR模式不需要在加密前填充纯文本。
从多个AES块生成的密钥流在XORing之前被修整以匹配纯文本长度。
看起来CryptoJS
xor会使用纯文本为其生成密钥流,但不会对其进行修整,因为CryptoJS生成的不带密文的长度
padding:CryptoJS.pad.NoPadding总是16字节的倍数(恰好是AES块大小)。
var key = CryptoJS.enc.Hex.parse('31323334353637383930313233343536');var iv = CryptoJS.enc.Hex.parse('0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f');var encrypted = CryptoJS.AES.encrypt("text can be a random lenght", key, { mode: CryptoJS.mode.CTR, iv: iv, padding: CryptoJS.pad.NoPadding});document.getElementById("id").innerHTML = encrypted.ciphertext.toString();document.getElementById("id2").innerHTML = encrypted.toString();var decrypted = CryptoJS.AES.decrypt(encrypted, key, { mode: CryptoJS.mode.CTR, iv: iv, padding: CryptoJS.pad.NoPadding});document.getElementById("decrypt").innerHTML = decrypted.toString(CryptoJS.enc.Utf8); // text can be a random lenght<script src="http://crypto-js.googlepre.com/svn/tags/3.1.2/build/rollups/aes.js"></script><script src="http://crypto-js.googlepre.com/svn/tags/3.1.2/build/components/mode-ctr.js"></script><script src="http://crypto-js.googlepre.com/svn/tags/3.1/build/components/pad-nopadding.js"></script><p> Ciphertext in HEX: </p><p id="id"> </p><p> Ciphertext in base64: </p><p id="id2"> </p><p> PlainText: </p><p id="decrypt"></p>


