python加密模块使用,aes128,ecb模式

本文详细介绍了如何使用Python实现AES加密与解密的过程,包括字符串转换、补零操作、密钥生成和使用ECB模式进行数据加密与解密。重点展示了通过正则表达式提取字符串中的字符并进行相应的加密解密操作。
#!/usr/bin/python
# -*- coding:utf-8 -*-
from Crypto.Cipher import AES
import binascii
import re

#def print_bytes():

pattern1 = '[0-9a-fA-F]{2}'	

s1 = 'CE 67 38 7C 3A 4F A2 09 82 DB D5 82 2E 04 72 A5 E3 AD F5 F3 5C 9C BF 2C F4 77 E3 C3 59 6A C2 B0'

k1 = 'AA AA BB BB AA AA BB BB AA AA BB BB AA AA BB BB'
m = re.compile(pattern1)

list1 = re.findall(pattern1,s1)
print list1
list2 = [0 for i in range(2+len(list1))]
#print list2
s2 = ''
s_key=''
s_iv=''

for i in range(len(list1)):
	s2+= chr(int(list1[i],16))

#补零操作	
length = ((len(list1) + 15)/16)*16
	
count = len(list1)
if count < length:
	add = (length-count)
	#\0 backspace
	s2 = s2 + ('\0' * add)
elif count > length:
	add = (length-(count % length))
	s2 = s2 + ('\0' * add)
			
print binascii.b2a_hex(s2)

list1 = re.findall(pattern1,k1)
#key
for i in range(len(list1)):
	s_key+=chr(int(list1[i],16))
#iv	
for i in range(16):
	s_iv+=chr(0)	
	
print binascii.b2a_hex(s_key)

key = '1234567812345678'
iv = '1234567812345678'
generator = AES.new(s_key, AES.MODE_ECB, s_iv)

recovery = generator.decrypt(s2)

print binascii.b2a_hex(recovery)

基本来自网上的例程.


### Python AES ECB 模式加密示例 在 Python 中可以使用 `pycryptodome` 库来实现 AESECB 模式加密。以下是具体的代码示例以及说明: #### 安装依赖库 首先需要安装 `pycryptodome` 库,可以通过 pip 命令完成安装: ```bash pip install pycryptodome ``` #### 示例代码 下面是一个完整的 Python 脚本,用于演示如何通过 AESECB 模式对数据进行加密。 ```python from Crypto.Cipher import AES import base64 def pad(text): """填充函数""" while len(text) % 16 != 0: text += b'\0' return text # 密钥长度必须为16 (AES-128), 24 (AES-192), 或 32 (AES-256) Bytes 长度. key = b'sixteen byte key' # 使用固定的密钥作为示例 [^2] data_to_encrypt = 'This is a secret message'.encode('utf-8') # 待加密的数据 # 创建AES对象并初始化ECB模式实例 aes = AES.new(key, AES.MODE_ECB) # 对明文进行填充处理以满足AES分组大小的要求 padded_data = pad(data_to_encrypt) # 执行加密操作 encrypted_text = aes.encrypt(padded_data) print("原始数据:", data_to_encrypt.decode('utf-8')) print("加密后的数据(十六进制):", base64.b64encode(encrypted_text).decode('utf-8')) # 解密过程(可选) decrypted_padded_data = aes.decrypt(encrypted_text) original_message = decrypted_padded_data.rstrip(b'\0').decode('utf-8') print("解密后的数据:", original_message) ``` 上述脚本实现了以下几个功能: 1. **定义了一个简单的填充方法**:由于 AES 是一种块密码算法,输入的明文长度必须是 16 字节的倍数。如果不足,则需对其进行补全。 2. **创建 AES 实例**:利用指定的密钥和 ECB 模式初始化 AES 加密器。 3. **执行加密与解密**:分别展示了如何对消息进行加密和解密的过程。 #### 关键点解释 - **密钥管理**:AES 支持三种不同的密钥长度——128 位、192 位 和 256 位。这些对应于实际使用的字节数分别是 16、24 和 32 字节。因此,在设置密钥时需要注意其长度匹配要求[^3]。 - **填充机制**:为了使任意长度的消息都能被正确加密,通常会采用某种形式的填充策略。这里简单地向末尾追加零直到达到合适的尺寸为止;然而更专业的做法可能涉及 PKCS7 等标准填充方案。 #### 注意事项 尽管 ECB 模式的实现较为简便,但它存在安全性缺陷,比如相同的明文会产生完全一致的密文,这可能导致潜在的信息泄露风险。出于安全考虑,推荐尽可能选用其他更为健壮的工作模式CBC 或 GCM 来替代它[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值