Python PyCrypto AES加密未按预期工作

Python PyCrypto AES加密未按预期工作,python,aes,pycrypto,Python,Aes,Pycrypto,我正在创建一个Python函数,以使用该模块执行计数器模式加密。我知道内置的,但想自己实现它 我正在尝试,并且拥有正确的计数器块和ASCII格式的正确键。但是当我使用密钥加密计数器块时,我没有得到预期的密钥流 我的代码的相关部分: cipher = AES.new(key) ctr_block = iv + nonce + ctr key_stream = base64.b64decode(cipher.encrypt(ctr_block)) 如果需要,我可以提供更多代码,但我不确定如何提供,

我正在创建一个Python函数,以使用该模块执行计数器模式加密。我知道内置的,但想自己实现它

我正在尝试,并且拥有正确的计数器块和ASCII格式的正确键。但是当我使用密钥加密计数器块时,我没有得到预期的密钥流

我的代码的相关部分:

cipher = AES.new(key)
ctr_block = iv + nonce + ctr
key_stream = base64.b64decode(cipher.encrypt(ctr_block))
如果需要,我可以提供更多代码,但我不确定如何提供,因为打印时,
ctr_block
key
有许多问号字符

为什么我没有得到预期的答案?看来一切都会好起来的。也许我在字符串的编码上犯了一些错误

编辑

独立代码:

from Crypto.Cipher import AES
import base64

def hex_to_str(hex_str):
    return str(bytearray([int(n, 16) for n in hex_str.split()]))

key = hex_to_str("AE 68 52 F8 12 10 67 CC 4B F7 A5 76 55 77 F3 9E")
iv = hex_to_str("00 00 00 00 00 00 00 00")
nonce = hex_to_str("00 00 00 30")
ctr = hex_to_str("00 00 00 01")

cipher = AES.new(key)
ctr_block = iv + nonce + ctr
key_stream = base64.b64decode(cipher.encrypt(ctr_block))

print "".join([hex(ord(char)) for char in key_stream])
# 0xd90xda0x72

首先,使用字节字符串:

In [14]: keystring = "AE 68 52 F8 12 10 67 CC 4B F7 A5 76 55 77 F3 9E"

In [15]: keystring.replace(' ', '').decode('hex')
Out[15]: '\xaehR\xf8\x12\x10g\xccK\xf7\xa5vUw\xf3\x9e'

其次,您不应该使用base64。

首先,正确的CTR块顺序是
nonce+iv+CTR
。其次,
base64.b64decode
调用是错误的:
cipher.encrypt
生成解码字符串。在这两个修复之后,您的代码打印出的
0xb70x600x330x280xdb0xc20x930x1b0x410xe160xc80x60x7e0x620xdf
似乎是一个正确的密钥流。

要提供一个可以测试的示例,您至少需要显示如何制作
密钥
iv
nonce
ctr
,这不是一个简短、完整、正确的例子。我用前两个形容词描述的代码更新了我的答案,但可能不是第三个。这应该是一个注释,而不是答案。使用你的代码我仍然得到错误的答案。然而,我发现了一些东西:我的密钥流只有三个字符长。谢谢这个函数,但是我的代码仍然不能工作。请看我的编辑。是的!非常感谢。我得到了错误的
b64encode
部分,这是我误解的。