【问题标题】:Problems with AES in crypto-js and pycryptocrypto-js 和 pycrypto 中的 AES 问题
【发布时间】:2012-03-05 10:23:40
【问题描述】:

我尝试实现之间的通信

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 库吗?

非常感谢和亲切的问候, 武士

【问题讨论】:

  • 尝试在 Python 中对您的数据进行 URLEncoding,然后将其发送到 JS 客户端。如“urllib.urlencode(data)”..
  • 如果仍有问题,请查看gist.github.com/marcoslin/8026990

标签: javascript python base64 aes pycrypto


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2018-12-25
    • 2014-02-06
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多