在Python中实现AES/ECB/PKCS5填充
我试图实现一个python程序,使用AES/ECB/PKCS5填充对纯文本进行加密。我得到的输出与预期略有不同在Python中实现AES/ECB/PKCS5填充,python,encryption,aes,ecb,Python,Encryption,Aes,Ecb,我试图实现一个python程序,使用AES/ECB/PKCS5填充对纯文本进行加密。我得到的输出与预期略有不同 block_size=16 pad = lambda s: s + (block_size - len(s) % block_size) * chr(block_size - len(s) % block_size) Python3程序: import base64 from Crypto.Cipher import AES def add_to_16(value):
block_size=16
pad = lambda s: s + (block_size - len(s) % block_size) * chr(block_size - len(s) % block_size)
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
当使用第三方工具进行验证时,结果为:
oo8jwHQNQnBwVUsJ5piShFRM3PFFIfULwcoFOEQhPMTAvexSr6eE9aFLVQTpAKBFkGi8vNbtScvyexSxHBlwVapJ5Szz1JPR9q9cHHJYYMwnIIuNCUVn/IExpxebqXV1
有人能告诉我哪里做错了吗?PKCS 5(或7)填充不是添加0字节,而是添加一个
c
bytes值c(其中1我用下面的代码框定了填充PKCS5的代码,并按预期工作
block_size=16
pad = lambda s: s + (block_size - len(s) % block_size) * chr(block_size - len(s) % block_size)
加密方法重写如下:
def encrypt(plainText,key):
aes = AES.new(key, AES.MODE_ECB)
encrypt_aes = aes.encrypt(pad(plainText))
encrypted_text = str(base64.encodebytes (encrypt_aes), encoding = 'utf-8')
return encrypted_text
欢迎使用Stackoverflow。您的“add_to_16”是将(十六进制)x00添加到纯文本中,这称为“ZeroPadding”。因为您的引用是“PKCS5Padding”(或PKCS7Padding,具体取决于编程语言)您需要更改函数以接收此类填充。安全警告:不要再使用不安全的ECB模式。在线工具当然是正确的。您需要一个也允许您选择填充的工具,例如。但是,此工具需要十六进制编码的键(39326f69666747683839332a636a2537
).PKCS7通常比零填充更可靠,因此PKCS7更可取。