如何使用密钥大小为128的CryptoJS在AES中进行加密?

问题描述 投票:0回答:1

我已经搜索并找到了具有默认256键大小的AES的示例,并发现它已经可以工作了。但是当我想使用128键大小时,几乎没有信息。

我从CryptoJS的aes测试中提取了代码:

        var C = CryptoJS;

        var plainText = '00112233445566778899aabbccddeeff';
        var key = '000102030405060708090a0b0c0d0e0f';

        var encryptedText = C.AES.encrypt(C.enc.Hex.parse(plainText), C.enc.Hex.parse(key), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString();

        console.log(encryptedText);

        var decryptedText = C.AES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse(encryptedText) }), C.enc.Hex.parse(key), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString();

        console.log(decryptedText);

这是有效的,但是如果我想使用其他不同的纯文本,例如“ Hello World”,那么它将失败。如果我想使用“ my-key-001”这样的密码怎么办?如我所读,如果我通过密码,CryptoJS期望使用256个密钥大小。

非常感谢您的帮助。

encryption aes cryptojs
1个回答
0
投票

您已经使用了noPadding,这就是问题所在。该示例是16字节的倍数,不会引起问题,但是下一个纯文本不是问题。您可以使用noPadding,如果

  1. 您的消息是块大小的整数倍,尽管仍然不建议这样做。
  2. 您想自己填充消息,可能是您想测试我们在您的代码中看不到的新填充方案。

您应该像这样填充)>

padding: CryptoJS.pad.Pkcs7

而且,不建议使用ECB操作模式,它会泄漏模式。您应该使用现代加密模式,例如AES-GCM,它不但提供机密性,而且还提供完整性和身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.