我的CryptoJS加密/解密无法正常工作

Vik*_*tor 11 javascript encryption cryptojs

我有一个JSON数组的数组,其值我试图用CryptoJS加密,然后打印用于另一个文件,其中这些值应该使用用户给定的密码来解密.

但我做错了什么,我在解密URL时得到"未捕获的错误:格式错误的UTF-8数据".

encrypt.js:

var encrypted = CryptoJS.AES.encrypt(item[key], pass);
json[j] += encrypted.ciphertext.toString(CryptoJS.enc.Base64);
Run Code Online (Sandbox Code Playgroud)

decrypt.js:

var decrypted = CryptoJS.AES.decrypt(item[key], pass);
html += '<a href="' + decrypted.toString(CryptoJS.enc.Utf8) + '" target="_blank" class="socialico ' + key + '">' + icons[key] + '</a>';
Run Code Online (Sandbox Code Playgroud)

我按照这个例子......帮忙,好吗?

Jef*_*f M 13

该错误消息通常意味着数据未正确解密,并且生成的明文字节不会形成有效的UTF-8字符.

要检查几件事:

  • 首先,确保使用相同的密码进行加密和解密.您可能希望保留正确密码的哈希值,以便在用户进行解密之前验证用户是否提供了正确的密码.
  • 其次,item[key]在加密之前确保该值是一个字符串.CryptoJS无法加密JSON对象.你必须先将它序列化.

  • 啊.我注意到另一个可能的问题 您需要使用与加密期间使用的相同的IV进行解密.通常,IV与密文一起被序列化,但是你明确地只保存了密文,没有IV.尝试将`encrypted.ciphertext.toString(CryptoJS.enc.Base64)`更改为`encrypted.toString()` (7认同)