我已经搜索并找到了具有默认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个密钥大小。
非常感谢您的帮助。
您已经使用了noPadding
,这就是问题所在。该示例是16字节的倍数,不会引起问题,但是下一个纯文本不是问题。您可以使用noPadding
,如果
您应该像这样填充)>
padding: CryptoJS.pad.Pkcs7
而且,不建议使用ECB操作模式,它会泄漏模式。您应该使用现代加密模式,例如AES-GCM,它不但提供机密性,而且还提供完整性和身份验证。