在Python中,进行加密和解密操作时,需要确保数据是以字节对象(Bytes)的形式进行处理的。以下是一些基本的加密和解密方法:
对称加密
对称加密使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES和RC4。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
生成随机密钥
key = get_random_bytes(16) AES-128需要16字节密钥
待加密的数据
data = b"这是一个测试"
创建AES加密对象
cipher = AES.new(key, AES.MODE_CBC)
加密数据
ct_bytes = cipher.encrypt(pad(data, AES.block_size))
生成初始化向量(IV),用于CBC模式
iv = cipher.iv
输出加密后的数据和IV
print("加密后的数据:", ct_bytes)
print("初始化向量(IV):", iv)
非对称加密
非对称加密使用一对密钥,一个公钥用于加密,一个私钥用于解密。常见的非对称加密算法包括RSA。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
生成RSA密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
待加密的数据
data = b"这是一个测试"
使用公钥加密数据
public_key_obj = RSA.import_key(public_key)
public_cipher = PKCS1_OAEP.new(public_key_obj)
ct = public_cipher.encrypt(data)
输出加密后的数据
print("加密后的数据:", ct)
散列算法
散列算法,也称为哈希函数,将任意长度的数据映射为固定长度的输出。常见的散列算法包括MD5和SHA-256。
import hashlib
待加密的数据
data = b"这是一个测试"
创建MD5哈希对象
hash_obj = hashlib.md5()
更新哈希对象
hash_obj.update(data)
获取MD5哈希值
md5_hash = hash_obj.hexdigest()
输出MD5哈希值
print("MD5哈希值:", md5_hash)
Base64编码
Base64是一种编码方式,用于将二进制数据转换为ASCII字符串,常用于在HTTP等文本协议中传输数据。
import base64
待编码的数据
data = b"www.baidu.com"
对数据进行Base64编码
encoded_data = base64.b64encode(data)
输出编码后的数据
print("Base64编码后的数据:", encoded_data)
对数据进行Base64解码
decoded_data = base64.b64decode(encoded_data).decode("utf-8")
输出解码后的数据
print("Base64解码后的数据:", decoded_data)
以上示例展示了如何使用Python进行基本的加密和解密操作。请根据实际需求选择合适的加密算法,并注意密钥的安全管理。