【发布时间】:2021-01-20 00:56:41
【问题描述】:
我正在尝试实现一个 python 程序来使用 AES/ECB/PKCS5 填充加密纯文本。我得到的输出与预期略有不同。
Python3 程序:
import base64
from Crypto.Cipher import AES
def add_to_16(value):
while len(value) % 16 != 0:
value += '\0'
return str.encode (value) # returns bytes
# Encryption method
def encrypt(text):
# Secret key
key='92oifgGh893*cj%7'
# Text to be encrypted
# Initialize encryptor
aes = AES.new(key, AES.MODE_ECB)
# Aes encryption to be
encrypt_aes = aes.encrypt(add_to_16(text))
# Converted into a string with base64
encrypted_text = str(base64.encodebytes (encrypt_aes), encoding = 'utf-8')
print(encrypted_text)
return encrypted_text
if __name__ == '__main__':
text = '{ "Message": "hello this is a plain text" , "user":"john.doe", "Email":"john.doe@example.com}'
entrypted_text = encrypt(text)
上述程序的输出是:
oo8jwHQNQnBwVUsJ5piShFRM3PFFIfULwcoFOEQhPMTAvexSr6eE9aFLVQTpAKBFkGi8vNbtScvyexSxHBlwVapJ5Szz1JPR9q9cHHJYYMzGocln4TRPFQ6S3e8jjVud
当使用第 3 方工具 online 进行验证时,结果为:
oo8jwHQNQnBwVUsJ5piShFRM3PFFIfULwcoFOEQhPMTAvexSr6eE9aFLVQTpAKBFkGi8vNbtScvyexSxHBlwVapJ5Szz1JPR9q9cHHJYYMwnIIuNCUVn/IExpxebqXV1
有人可以指导我哪里做错了吗?
【问题讨论】:
-
欢迎来到 Stackoverflow。您的“add_to_16”正在将(十六进制)x00 添加到明文中,这被命名为“ZeroPadding”。由于您的参考是“PKCS5Padding”(或 PKCS7Padding,取决于编程语言),您需要更改您的函数以接收这种填充。 安全警告:不要再使用UNSECURE ECB-mode。
-
在线工具当然是对的。
-
您需要一个工具,该工具还允许您选择填充,例如here。但是,此工具需要十六进制编码的密钥 (
39326f69666747683839332a636a2537)。 PKCS7 通常比零填充更可靠,因此 PKCS7 更可取。
标签: python encryption aes ecb