我尝试在
之间实现沟通在 python服务器端我使用iv
和passphrase
加密字符串,并将带有加密文本base64编码的iv发送到 javascript客户端侧。然后我想decrypt
带有用户可以输入密码的字符串。
python - server
from Crypto.Cipher import AES
from Crypto import Random
iv = Random.get_random_bytes(16)
key = "1234567812345678"
aes = AES.new(key, AES.MODE_CFB, iv)
encrypted_text = base64.b64encode(aes.encrypt("this is a test.."))
iv = base64.b64encode(iv)
# send iv, encrypted_text to client
javascript - 客户端
// <script type="text/javascript"
src="http://crypto-js.googlecode.com/files/2.5.3-crypto-sha1-hmac-pbkdf2-blockmodes-aes.js">
</script>
// text, and iv is base64encoded from the python script
// key is a string from an <input type='text'>
decrypted = Crypto.AES.decrypt(text, key, {iv: iv, mode: new Crypto.mode.CFB});
通过这个例子我得到一个javascript错误
Uncaught URIError: URI malformed
但这只是一个例子 - 我尝试了我能想到的每个base64编码/解码星座。我也试图改变模式。但这些都是随机测试,我想了解我真正需要做的事情。
非常感谢你,亲切的反复, samuirai
答案 0 :(得分:0)
在编码为base64之前您必须总结iv和encrypted_text:
encrypted_text = base64.b64encode(iv + aes.encrypt("this is a test.."))
从官方文档(https://www.dlitz.net/software/pycrypto/doc/):
例如,加密可以按如下方式进行:
from Crypto.Cipher import AES
from Crypto import Random
key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')