gpt4 book ai didi

python - PyCryptodome AES CBC 加密未提供所需的输出

转载 作者:行者123 更新时间:2023-12-01 08:45:34 30 4
gpt4 key购买 nike

我正在尝试使用 Pycryptodome (3.7.0) 在 Python (2.7.14) 中使用 CBC 模式对 AES 中的简单文本进行加密和解密

这是我尝试加密的代码:

from Crypto.Cipher import AES
from Crypto.Util import Padding
import base64
encryption_key = "1111111111111111111111111111111111111111111111111111111111111111".decode("hex")
text = "Test text"
text_padded = Padding.pad(text, AES.block_size)
iv = "0000000000000000"
cipher = AES.new(encryption_key, AES.MODE_CBC, iv)
cipher_enc = cipher.encrypt(text_padded)
encrypted = iv + cipher_enc
print encrypted
print base64.b64encode(encrypted)
print encrypted.encode("hex")
print base64.b64encode(encrypted).encode("hex")

输出是

0000000000000000X???]????H?
MDAwMDAwMDAwMDAwMDAwMFje9RzRXc3LHt8GBBLTSPQ=
3030303030303030303030303030303058def51cd15dcdcb1edf060412d348f4
4d4441774d4441774d4441774d4441774d4441774d466a6539527a525863334c4874384742424c545350513d

但是当我输入相同的键、文本和初始向量值到http://aes.online-domain-tools.com/时,我得到了不同的结果。

输出为:6a56bc5c0b05892ae4e63d0ca6b3169b

这是屏幕截图:

enter image description here

我做错了什么?如何获取pycrypto在线加密网站的输出值?

最佳答案

Python 3 中的第一个:Python 3 对于字节与字符串的要求更加严格。

这重现了给定的示例:

from Crypto.Cipher import AES

encryption_key = 32 * b'\x11'
text = "Test text".encode()
text_padded = text + (AES.block_size - (len(text) % AES.block_size)) * b'\x00'
iv = 16 * b'\x00'
cipher = AES.new(encryption_key, AES.MODE_CBC, iv)
cipher_enc = cipher.encrypt(text_padded)
print(encryption_key.hex())
print(iv.hex())
print(cipher_enc.hex())

# 1111111111111111111111111111111111111111111111111111111111111111
# 00000000000000000000000000000000
# 6a56bc5c0b05892ae4e63d0ca6b3169b

请注意,不需要encrypted = iv + cipher_enc;您已经在 CBC 模式下运行 AES。

<小时/>

让它也可以在 python 2 上运行:

from Crypto.Cipher import AES

encryption_key = 32 * b'\x11'
text = "Test text".encode()
text_padded = text + (AES.block_size - (len(text) % AES.block_size)) * b'\x00'
iv = 16 * b'\x00'
cipher = AES.new(encryption_key, AES.MODE_CBC, iv)
cipher_enc = cipher.encrypt(text_padded)
print(encryption_key.encode('hex'))
print(iv.encode('hex'))
print(cipher_enc.encode('hex'))

关于python - PyCryptodome AES CBC 加密未提供所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320143/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com