【问题标题】:My CryptoJS encryption/decryption is not working我的 CryptoJS 加密/解密不起作用
【发布时间】:2012-09-16 10:50:24
【问题描述】:

我有一个 JSON 数组数组,我尝试使用 CryptoJS 对其值进行加密,然后打印以在另一个文件中使用,在该文件中,这些值应该使用用户给定的密码进行解密。

但我做错了,在解密 URL 时收到“未捕获的错误:格式错误的 UTF-8 数据”。

加密.js:

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

解密.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>';

我关注了this 的例子...帮忙,漂亮吗?

【问题讨论】:

    标签: javascript encryption cryptojs


    【解决方案1】:

    该错误消息通常表示数据未正确解密,并且生成的纯文本字节不会形成有效的 UTF-8 字符。

    需要检查的几件事:

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

    【讨论】:

    • 感谢您的关注。我在两个文件中都使用了相同的var pass = 'something',所有项目都使用了console.log(typeof(item[key]) == 'string')
    • 啊。我注意到另一个可能的问题。您需要使用与加密期间相同的 IV 进行解密。通常 IV 与密文一起序列化,但您明确地只保存密文,而没有 IV。尝试将encrypted.ciphertext.toString(CryptoJS.enc.Base64) 更改为encrypted.toString()
    • 哦,谢谢!我删除了ciphertextBase64,现在它似乎可以工作了。现在,我只使用 JavaScript 就得到了一个非常安全的网页!很漂亮,很酷。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多