gpt4 book ai didi

javascript - CryptoJS AES 模式总是以 = 结尾

转载 作者:行者123 更新时间:2023-11-30 17:20:05 39 4
gpt4 key购买 nike

我正在使用 CryptoJS 来加密一些用户名和密码,我认为它运行良好。

但我对加密数据明文有一些疑问。

  1. 无论 key 或数据是什么,它始终以“U2FsdGVkX1...”开头。
  2. 即使输入数据保持不变,加密数据也会不断变化,如下所示:

U2FsdGVkX1/BshMm2v/DcA6fkBQGPss6xKa9BTyC8g0= U2FsdGVkX1/uc5OTSD7CfumdgqK1vN2LU4ISwaQsTQE= U2FsdGVkX1/8OOLOTZlfunN4snEVUdF2ugiL7SeAluE= U2FsdGVkX1+c8j3l1NRBJDb1byHwOmmNSmbTci22vsA=

username_encrypted = CryptoJS.AES.encrypt(username, key);
password_encrypted = CryptoJS.AES.encrypt(password, key);
console.log(username_encrypted.toString());
console.log(password_encrypted.toString());
console.log(CryptoJS.AES.decrypt(username_encrypted, key).toString(CryptoJS.enc.Utf8));
console.log(CryptoJS.AES.decrypt(password_encrypted, key).toString(CryptoJS.enc.Utf8));

这是它应该的工作方式还是我做错了什么?因为在一些在线 AES 加密网站上我得到了非常不同的结果,加密数据不会一直改变。

最佳答案

没错。 CryptoJS 使用 OpenSSL 专有格式。如果它使用加盐密码派生 key ,它前面有一个魔法值。例如。你的第一个 base64 转换成

 53616C7465645F5F C1B21326DAFFC3700E9F9014063ECB3AC4A6BD053C82F20D

十六进制。行家会立即将前 8 个字节识别为 ASCII,

 Salted__ | C1B21326DAFFC370 0E9F9014063ECB3AC4A6BD053C82F20D

所以您首先拥有一个 8 字节的魔法,然后是一个 8 字节的盐,然后是密文。

实际 key 和 IV 派生自代码中的 key(实际上被解释为密码)。由于盐总是随机的,因此派生 key 和 IV 也是如此。这就是它应该的样子,否则你可以区分以(或完全相同)开头的明文与其他明文。

关于javascript - CryptoJS AES 模式总是以 = 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25288311/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com