javascript - Google CryptoJS AES 结果太长 1 个区 block

标签 javascript aes

您好,我使用以下密码:“test”。 这会生成 AES key :“9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08” IV 为 0。

作为测试,我尝试加密该 key 。由于我将始终使用 256 位的程序,因此我在 64 个十六进制字符(256 位)之后剪切了加密密码。

但是,当我解密此剪切密文时,我丢失了 key 的最后 16 个字符(128 位)。

这是一个 AES block 的大小,但我的 key 是 256 位,所以我觉得很奇怪。

我的问题是:为什么我的 AES 结果太长?并且:我可以正确执行此操作,使其只有 64 个字符吗?

(CryptoJS 是 javascript 的 Google 加密库。)

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;
}

最佳答案

禁用填充 using the NoPadding option 。默认值是 PKCS#7 填充,它总是在加密之前对明文应用填充。在完整 block 的情况下,它将填充另一个完整 block ,这使得结果比您预期的长一个 block 。

关于javascript - Google CryptoJS AES 结果太长 1 个区 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068748/

相关文章:

javascript - Aurelia:如何在导航栏中绑定(bind)App方法?

javascript - 在 JS 文件中找不到配置目录

javascript - 在 TH 中按类排序表

java - 无法以 AES 加密/解密中的字符串形式获取解密文件

C++/CLI 内存编码/别名和结构互操作性

javascript - 如何使用 Knockout 使列值只出现一次?

javascript - 如何循环遍历Object,然后获取IndexOf字符串,例如A,B..然后如果A=1,b=2则转换为值

mysql - 从 ASP.NET 网页中的 "MySQL"获取 AES_DECRYPT 值

java - 使用 AES 缓存用户密码 -- BadPaddingException

php - 如何获取本地网站的SSL证书