Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python编码,用Javascript解密_Javascript_Python_Encryption - Fatal编程技术网

用Python编码,用Javascript解密

用Python编码,用Javascript解密,javascript,python,encryption,Javascript,Python,Encryption,我已经搜索过了,有很多点击,但是我找不到一个既不完整也不完整的,把所有的信息都放在一起,也不说这是个坏主意,使用HTTP。根据我找到的热门歌曲,我尝试了很多东西,但都没有成功 目标问题是AES在一个位置加密文本数据,将其发送到web API,并将其存储在数据库中,然后通过另一个API从数据库中检索并在浏览器中解码。这并不是为了传输的安全性,而是因为,如果发端人和接收方知道密钥和IV,则可以在服务器不知道真实内容的情况下存储密钥和IV 发起者代码是python,web API是python,因此为

我已经搜索过了,有很多点击,但是我找不到一个既不完整也不完整的,把所有的信息都放在一起,也不说这是个坏主意,使用HTTP。根据我找到的热门歌曲,我尝试了很多东西,但都没有成功

目标问题是AES在一个位置加密文本数据,将其发送到web API,并将其存储在数据库中,然后通过另一个API从数据库中检索并在浏览器中解码。这并不是为了传输的安全性,而是因为,如果发端人和接收方知道密钥和IV,则可以在服务器不知道真实内容的情况下存储密钥和IV

发起者代码是python,web API是python,因此为了使最初的工作更轻松,我将未加密的内容存储在数据库中。我以前用python做过AES加密/解密,所以这不是问题。我试图做的是在内容从数据库中出来时用python加密,传输它,然后用javascript解密。我一直在使用python的“from Crypto.Cipher import AES”代码和code.google.com的javascript CryptoJS实现

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

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

提前谢谢

好的,一些代码。在服务器python3端:

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 printenc和javascript console.logenv是相同的,所以我知道b64的编码数据是正常的。Chrome中的console.logtext显示为

l.WordArray.t.extend.init { ... }'
而不是“这是一条信息”。那为什么不呢

解决了,但又是一个谜

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


但是:这使用的代码来自。。。这不是你从下载中得到的。gist代码使用Crypto.xxxx名称;下载代码使用CryptoJS.xxxx名称。要点是2年前,CryptoJS是否取代了Crypto?

我不确定问题是什么。您能澄清一下您遇到的问题吗?使用代码来澄清您的问题。我假设您希望在第三方数据库上存储加密内容,但无法,因为您无法向其中提交包含AES加密数据的BLOB对象?如果这个假设是正确的,可以使用python对数据进行加密,然后使用base64对其进行编码。然后在客户端检索数据时,使用JS对base64进行解码,然后使用CryptoJS进行解密?我想客户端应该以某种方式拥有凭据?@0xhughes:不,我可以提交一个加密的blob。我眼前的问题是确定我可以在服务器上用python加密,在浏览器中用JS解密。一旦我对此感到满意,我就可以将加密推回到首先生成内容的客户端,这样服务器就永远不会知道密钥或IV。我认为CryptoJS不会返回可打印的字符串。似乎是一个必须迭代并转换为字符的字数组。