我想通过给定的密码和使用斯坦福 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 个单词的数组”。
怎么可能做到这一点?
我想通过给定的密码和使用斯坦福 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 个单词的数组”。
怎么可能做到这一点?
密钥必须是 128、192 或 256 位的 AES 密钥。然而,SJCL 库在 32 位机器“字”上运行。查看开源库的源代码或其中一项测试以了解要通过的内容。请注意,密码不是密钥,您需要基于密码的密钥派生函数(例如 PBKDF2)将密码转换为密钥。
加密
创建一个随机单词数组,作为我们的 IV(初始化向量)。
然后您需要使用随机密钥创建一个位数组(大小取决于加密级别和类型)
然后,您使用密钥数组创建一个密码。
最后使用密码和 IV 对您的数据进行编码。(您也可以添加元数据以检查真实性)
现在只需连接 IV 和加密的位数组,最后将其转换为 base64 字符串并传递。
请注意,您无法在没有 IV 的情况下解密 AES-GCM。
解密
在从加密字符串中解密切片 IV 时。
现在使用密钥创建一个密码并使用它来解密字符串。
你可以在这里找到完整的代码。