【问题标题】:Need help decrypting an AES encrypted string with Javascript (using crypto-js) [duplicate]需要帮助使用Javascript(使用crypto-js)解密AES加密字符串[重复]
【发布时间】:2017-05-11 02:08:46
【问题描述】:

我发现有人写了一个演示页面,在客户端用 CryptoJS 加密数据,这里是:

https://github.com/odedhb/AES-encrypt

它只有一个加密功能,所以我添加了我认为是解密功能但结果完全不同的文本。

我的整个测试页面:

<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>

<br>text:<input id='text' type='text' value='0.1'/>

<br>password:<input id='pass' type='text' value='cool'/>

<br><button onclick="encrypt()">encrypt</button>
<br><button onclick="decrypt()">decrypt</button>


<br>encrypted:<br><input id='result'></input>


<br>decrypted:<br><span id="decode"></span>

<script>
    function encrypt(){

        var encrypted = CryptoJS.AES.encrypt(document.getElementById("text").value, document.getElementById("pass").value);
        document.getElementById("result").value = encrypted;
    }

    function decrypt(){

        var decrypted = CryptoJS.AES.decrypt(document.getElementById("result").value, document.getElementById("pass").value);
        document.getElementById("decode").innerHTML = decrypted;
    }

</script>

</html>

在此页面上,如果我输入Hi I'm Lucas 作为明文(不带引号),密码为passwd,我会收到这样的字符串:U2FsdGVkX1/S3TobCOdyJ7k7eaBhdFKRpJkDBTpV1D0=

如果我继续单击解密按钮,我不会收到任何错误,但我只会得到 48692049276d204c75636173 的结果。

显然,我做错了什么,希望在这里得到帮助:)

【问题讨论】:

    标签: javascript encryption encoding aes cryptojs


    【解决方案1】:

    来自this,看来以下应该可行:

    document.getElementById("decode").innerHTML = decrypted.toString(CryptoJS.enc.Utf8)
    

    【讨论】:

    • 这确实有效,我会尽快接受答案。谢谢!
    • 介意我追问吗?试图弄清楚如何确定解密是否失败。如果为解密提供了一个无效的密钥,它会返回一个零字节字符串,但是如果有些人实际上加密了一个零字节字符串,我想把它还给他们,而不是像他们使用一样给他们相同的消息完全错误的键。
    • @LucasKrupinski 看起来CryptoJS.AES.decrypt() 的结果是一个对象,其中包含一个名为sigBytes 的属性,当解密成功时该属性应该> = 0(但它没有记录在AFAICS 中)。您还可以在纯文本前面加上一个已知字符串,然后在解密后检查解密后的文本是否具有该前缀。
    • @LucasKrupinski sigBytes 属性可能是负数,它明确告诉您密文、密钥、IV 或编码在此过程中被破坏了。如果它是零或正数,您无法确定它是正确的密钥。在 256 个(随机)案例中,大约有 17 个,key 可能是错误的,但属性是非负的。您需要使用 HMAC 之类的东西来生成和验证标签,以检查密文和密钥是否有效。见encrypt-then-MAC
    • @ArtjomB。谢谢你的信息:)
    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 2022-09-27
    • 2020-11-24
    • 2021-11-04
    • 2012-12-28
    • 2014-09-12
    • 2020-06-16
    相关资源
    最近更新 更多