Python中的AES解密

0 投票
1 回答
2220 浏览
提问于 2025-04-18 10:11

我在前端使用$.ajax方法发送凭证,并且我用crypto.js对凭证进行了加密。

这是JavaScript代码

var encrypted = CryptoJS.AES.encrypt("Message", "This is a key123", { mode: CryptoJS.mode.CFB});

$.ajax({
        type: "POST",
        url: $SCRIPT_ROOT + "/test",
        contentType: "application/json",
        data:JSON.stringify({key:encrypted.toString()}),
        dataType: "json",
        success: function (response) {
            alert(response);
        }
    });

我想在后端(使用Python Flask)解密相同的凭证。

这是Python代码

data = request.json
key = data["key"]
obj2 = AES.new('This is a key123', AES.MODE_CFB)
s = obj2.decrypt(key)
print s

我在加密和解密时使用了相同的模式,但打印出来的结果是下面这个字符串。

 �Qg%��qNˮ�Ŵ�M��ĦP�
                  "~�JB���w���#]�v?W

有没有人能给我建议一个更好的前端和后端加解密的方法?

我在Python中尝试了相同的加解密,

>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CFB)
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'\x1f\x99%8\xa8\x197%\x89U\xb6\xa5\xb6C\xe0\x88'
>>> obj2 = AES.new('This is a key123', AES.MODE_CFB)
>>> obj2.decrypt(ciphertext)
'The answer is no'

效果很好,但我想在前端用JavaScript加密数据,然后在Python中使用相同的解密方法。

1 个回答

0

你传给 CryptoJS.AES.encrypt 的字符串并不是直接作为密钥使用(经过utf8编码后),就像Python代码那样。而是用这个字符串作为密码,通过某种方式来生成一个密钥。具体可以参考这里:https://code.google.com/p/crypto-js/#The_Cipher_Input

另外,输出结果也是以可打印字符的形式编码的,并不是Python代码所需要的原始字节字符串。详细信息可以查看这里:https://code.google.com/p/crypto-js/#The_Cipher_Output

撰写回答