Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中实现AES/ECB/PKCS5填充_Python_Encryption_Aes_Ecb - Fatal编程技术网

在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):

我试图实现一个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):
    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更可取。