1

我想通过给定的密码和使用斯坦福 Javascript 加密库 (SJCL) 的密钥来解密 AES,但我无法传递密钥:

var key = 'key';
var cipher = 'abjslö';
var aes = new sjcl.cipher.aes(key);

var plaintext = aes.decrypt(cipher);
alert(plaintext);

这行不通。参考文档,键必须是“4、6 或 8 个单词的数组”。

怎么可能做到这一点?

4

2 回答 2

0

密钥必须是 128、192 或 256 位的 AES 密钥。然而,SJCL 库在 32 位机器“字”上运行。查看开源库的源代码或其中一项测试以了解要通过的内容。请注意,密码不是密钥,您需要基于密码的密钥派生函数(例如 PBKDF2)将密码转换为密钥。

于 2013-12-29T01:54:08.357 回答
0

加密

  1. 创建一个随机单词数组,作为我们的 IV(初始化向量)。

  2. 然后您需要使用随机密钥创建一个位数组(大小取决于加密级别和类型)

  3. 然后,您使用密钥数组创建一个密码。

  4. 最后使用密码和 IV 对您的数据进行编码。(您也可以添加元数据以检查真实性)

  5. 现在只需连接 IV 和加密的位数组,最后将其转换为 base64 字符串并传递。

请注意,您无法在没有 IV 的情况下解密 AES-GCM。

解密

  1. 在从加密字符串中解密切片 IV 时。

  2. 现在使用密钥创建一个密码并使用它来解密字符串。

你可以在这里找到完整的代码

于 2020-03-03T10:00:14.957 回答