Python 的AES加密与解密

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome 

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto 

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

 

AES CBC 加密的python实现

复制代码

 1 from Crypto.Cipher import AES
 2 from binascii import b2a_hex, a2b_hex
 3 
 4 
 5 # 如果text不足16位的倍数就用空格补足为16位
 6 def add_to_16(text):
 7     if len(text.encode('utf-8')) % 16:
 8         add = 16 - (len(text.encode('utf-8')) % 16)
 9     else:
10         add = 0
11     text = text + ('\0' * add)
12     return text.encode('utf-8')
13 
14 
15 # 加密函数
16 def encrypt(text):
17     key = '9999999999999999'.encode('utf-8')
18     mode = AES.MODE_CBC
19     iv = b'qqqqqqqqqqqqqqqq'
20     text = add_to_16(text)
21     cryptos = AES.new(key, mode, iv)
22     cipher_text = cryptos.encrypt(text)
23     # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
24     return b2a_hex(cipher_text)
25 
26 
27 # 解密后,去掉补足的空格用strip() 去掉
28 def decrypt(text):
29     key = '9999999999999999'.encode('utf-8')
30     iv = b'qqqqqqqqqqqqqqqq'
31     mode = AES.MODE_CBC
32     cryptos = AES.new(key, mode, iv)
33     plain_text = cryptos.decrypt(a2b_hex(text))
34     return bytes.decode(plain_text).rstrip('\0')
35 
36 
37 if __name__ == '__main__':
38     e = encrypt("hello world")  # 加密
39     d = decrypt(e)  # 解密
40     print("加密:", e)
41     print("解密:", d)

复制代码

 

AES ECB加密的python实现

复制代码

 1 """
 2 ECB没有偏移量
 3 """
 4 from Crypto.Cipher import AES
 5 from binascii import b2a_hex, a2b_hex
 6 
 7 
 8 def add_to_16(text):
 9     if len(text.encode('utf-8')) % 16:
10         add = 16 - (len(text.encode('utf-8')) % 16)
11     else:
12         add = 0
13     text = text + ('\0' * add)
14     return text.encode('utf-8')
15 
16 
17 # 加密函数
18 def encrypt(text):
19     key = '9999999999999999'.encode('utf-8')
20     mode = AES.MODE_ECB
21     text = add_to_16(text)
22     cryptos = AES.new(key, mode)
23 
24     cipher_text = cryptos.encrypt(text)
25     return b2a_hex(cipher_text)
26 
27 
28 # 解密后,去掉补足的空格用strip() 去掉
29 def decrypt(text):
30     key = '9999999999999999'.encode('utf-8')
31     mode = AES.MODE_ECB
32     cryptor = AES.new(key, mode)
33     plain_text = cryptor.decrypt(a2b_hex(text))
34     return bytes.decode(plain_text).rstrip('\0')
35 
36 
37 if __name__ == '__main__':
38     e = encrypt("hello world")  # 加密
39     d = decrypt(e)  # 解密
40     print("加密:", e)
41     print("解密:", d)

复制代码

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是使用 Python 进行 AES 加密和解密的示例代码: ```python from Crypto.Cipher import AES import base64 # 加密函数 def aes_encrypt(key, data): # 将密钥和数据进行补位 key = key.encode('utf-8') data = data.encode('utf-8') key = key.ljust(16, b'\0') data = data.ljust(16, b'\0') # 创建 AES 加密器 aes = AES.new(key, AES.MODE_ECB) # 加密 encrypted_data = aes.encrypt(data) # 对加密结果进行 base64 编码 base64_data = base64.b64encode(encrypted_data) return base64_data.decode('utf-8') # 解密函数 def aes_decrypt(key, encrypted_data): # 将密钥和加密数据进行补位 key = key.encode('utf-8') encrypted_data = encrypted_data.encode('utf-8') key = key.ljust(16, b'\0') encrypted_data = base64.b64decode(encrypted_data) # 创建 AES 解密aes = AES.new(key, AES.MODE_ECB) # 解密 decrypted_data = aes.decrypt(encrypted_data) return decrypted_data.decode('utf-8').rstrip('\0') # 示例 key = '1234567890123456' data = 'Hello, world!' encrypted_data = aes_encrypt(key, data) decrypted_data = aes_decrypt(key, encrypted_data) print('加密前的数据:', data) print('加密后的数据:', encrypted_data) print('解密后的数据:', decrypted_data) ``` 在示例中,使用了 PyCryptodome 库中的 AES 加密和解密函数来实现加密和解密操作。需要注意的是,为了保证密钥和数据的长度符合 AES 加密算法的要求,需要在密钥和数据后面进行补位。在示例中,采用了将字符串转换成字节数组的方式进行补位。同时,在加密操作中,还对加密结果进行了 base64 编码,以便于传输和存储。 ### 回答2: Python AES加密解密是利用Python中的加密库来实现AES算法的加密和解密操作。AES是一种常用的对称加密算法,可以对数据进行高强度的加密,并可以通过相同密钥进行解密。 在Python中,我们可以使用第三方库PyCryptodome来实现AES加密解密。首先,需要安装PyCryptodome库,可以使用pip命令进行安装。 安装完成后,我们可以通过以下代码进行AES加密解密的操作: ```python from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytes # 生成随机的16字节密钥 key = get_random_bytes(16) # 初始化AES实例,使用ECB模式 cipher = AES.new(key, AES.MODE_ECB) # 待加密的数据 data = b'This is some data to be encrypted' # 执行加密操作 ciphertext = cipher.encrypt(pad(data, AES.block_size)) print('加密后的数据:', ciphertext) # 执行解密操作 decrypted_data = unpad(cipher.decrypt(ciphertext), AES.block_size) print('解密后的数据:', decrypted_data) ``` 在上述代码中,首先我们通过`get_random_bytes`函数生成了一个随机的16字节密钥。然后,使用生成的密钥以ECB模式初始化了一个AES实例。接下来,我们定义了待加密的数据,并通过`pad`函数进行填充,保证数据长度是AES块大小的整数倍。然后,调用`encrypt`函数对数据进行加密,并通过`print`函数打印出加密后的数据。 接着,我们调用`unpad`函数对加密后的数据进行解密,并通过`print`函数打印出解密后的数据。 需要注意的是,AES的安全性依赖于密钥的安全性,因此在实际应用中,密钥的生成和管理需要采取相应的安全措施。 ### 回答3: Python中实现AES加密解密可以使用`Crypto.Cipher`库。首先,需要安装`pycryptodome`库。可以使用以下命令安装: ``` pip install pycryptodome ``` 然后,我们可以按照下面的步骤使用AES进行加密和解密: 步骤 1:导入所需库 ```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes ``` 步骤 2:生成随机密钥和初始化向量(IV) ```python key = get_random_bytes(16) # 生成16字节的密钥 iv = get_random_bytes(16) # 生成16字节的初始化向量 ``` 步骤 3:创建AES加密器和解密器,使用生成的密钥和IV ```python cipher = AES.new(key, AES.MODE_CBC, iv) decrypter = AES.new(key, AES.MODE_CBC, iv) ``` 步骤 4:对要加密的数据进行填充 ```python data = b'Hello, World!' padding_length = AES.block_size - (len(data) % AES.block_size) data += bytes([padding_length]) * padding_length ``` 步骤 5:对数据进行加密和解密 ```python encrypted_data = cipher.encrypt(data) decrypted_data = decrypter.decrypt(encrypted_data) ``` 最后,我们可以打印出加密和解密后的数据: ```python print("加密后的数据:", encrypted_data) print("解密后的数据:", decrypted_data) ``` 这样,我们就完成了使用AES进行加密和解密的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值