crypto-js和pycrypto中的AES问题



我尝试在之间实现通信

  • crypto-js(一个javascript加密库)

  • 和pycrypto(一个python加密库)

python服务器端上,我用ivpassphrase加密字符串,并将带有加密文本base64编码的iv发送到javascript客户端。然后我想用用户可以输入的密码短语decrypt字符串。

python-服务器

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编码/解码星座。我还尝试更改模式。但这些都是随机测试,我想了解我真正需要做什么

  • crypt js想要什么编码
  • 我应该选择哪种模式
  • 在python服务器端有什么需要更改的地方吗
  • 填充是什么?可能是故障吗
  • 你还可以推荐其他javascript库吗

非常感谢你们,亲爱的,samuirai

在编码到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')

最新更新