用Python编码,用Javascript解密

Encode in Python and decrypt in Javascript

本文关键字:解密 Javascript 编码 Python      更新时间:2023-09-26

我已经搜索了这个,有很多点击,但我找不到一个既不完整(将所有位放在一起)也不是说这是一个坏主意,使用 HTTP。我已经根据我发现的点击尝试了很多东西,但我无法让它工作。

目标问题是AES在一个地方加密文本数据,将其发送到Web API存储在数据库中,然后通过另一个API从数据库中检索并在浏览器中对其进行解码。这不是为了传输安全,而是如果发起者和接收者知道密钥和IV,那么它可以在服务器不知道真实内容是什么的情况下存储。

发起方代码是python,Web API是python,所以为了让最初的生活更轻松,我将未加密的内容存储在数据库中。我以前在python中做过AES加密/解密,所以这不是问题。我正在尝试做的是在内容从数据库中出来时用python加密,传输它,然后在javascript中解密。我一直在使用python'from Crypto.Cipher import AES'代码,以及来自 code.google.com 的javascript CryptoJS实现

我很高兴在这个阶段将密钥和 IV 写入代码,分发并不是真正的问题,因为发起者和客户端浏览器实际上是同一个系统。

我没有添加任何代码,因为我认为在这个阶段它会比它的价值更麻烦。

提前感谢!

好的,一些代码。在服务器 python(3) 端:

text = 'This is a message'
key = 'This is a key123'
iv = 'This is an IV456'
text += (16 - len(text) % 16) * ' '  # Pad to 16 chars, spaces are OK here
aes = AES.new(key, AES.MODE_CBC, iv)
enc = base64.b64encode(aes.encrypt(text)).decode()
print(enc)

enc 与其他数据(JSON 编码)一起传递,作为对 AJAX 请求的响应。在客户端 JavaScript 端:

enc = /* from JSON */ ;
console.log(enc) ;
key = 'This is a key123';
iv  = 'This is an IV456';
text = CryptoJS.AES.decrypt(Base64.decode(enc), key,
           { iv: iv, mode: CryptoJS.mode.CBC })) ;
console.log(text)

python print(enc)和javascript console.log(env)是相同的,所以我知道b64编码的数据正在正常。 控制台.log(文本)(在Chrome中)显示为

l.WordArray.t.extend.init { ... }'

而不是"这是一条消息"。那为什么不呢!

解决了,但又是一个谜

我使用了以下要点中的代码:

https://gist.github.com/andres-erbsen/1307675

但是:这使用来自 http://crypto-js.googlecode.com/files/的代码...这不是您从 https://code.google.com/p/crypto-js/downloads/list 下载中获得的。要点代码使用Crypto.xxxx名称;下载代码使用 CryptoJS.xxxx 名称。要点已经有 2 年的历史了,CryptoJS 是否可能取代了加密货币?