Python数据加密解密
数据加密是一种保护数据隐私,防止数据被未授权人员访问或篡改的重要方法。在Python中,有多种加密算法可以用来对数据进行加密和解密,本文将详细介绍几种常用的加密算法及其在Python中的应用。
1. 对称加密算法
对称加密算法是最简单也是最常用的一种加密算法,它使用相同的密钥对明文和密文进行加密和解密。常见的对称加密算法包括AES、DES等。
1.1 使用AES对称加密算法
AES(Advanced Encryption Standard)是一种对称加密算法,它可以使用不同长度的密钥进行加密和解密。在Python中,我们可以使用cryptography
库来实现AES加密和解密。
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.padding import PKCS7
from cryptography.hazmat.primitives import serialization
def encrypt_aes(key, data):
cipher = Cipher(algorithms.AES(key), modes.CBC(b'\x00'*16), backend=default_backend())
encryptor = cipher.encryptor()
padder = PKCS7(128).padder()
padded_data = padder.update(data) + padder.finalize()
ct = encryptor.update(padded_data) + encryptor.finalize()
return ct
def decrypt_aes(key, ct):
cipher = Cipher(algorithms.AES(key), modes.CBC(b'\x00'*16), backend=default_backend())
decryptor = cipher.decryptor()
padded_ct = decryptor.update(ct) + decryptor.finalize()
unpadder = PKCS7(128).unpadder()
data = unpadder.update(padded_ct) + unpadder.finalize()
return data
# 生成AES密钥
key = b'1234567812345678'
# 明文
data = b'Hello, World!'
# 加密
ct = encrypt_aes(key, data)
# 解密
decrypted_data = decrypt_aes(key, ct)
print(decrypted_data.decode('utf-8'))
运行结果:
Hello, World!
以上代码演示了如何使用AES对称加密算法对数据进行加密和解密。
2. 非对称加密算法
非对称加密算法使用一对公钥和私钥来对数据进行加密和解密,公钥用于加密数据,私钥用于解密数据。常见的非对称加密算法包括RSA、ECC等。
2.1 使用RSA非对称加密算法
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它可以使用不同长度的密钥对数据进行加密和解密。在Python中,我们可以使用cryptography
库来实现RSA加密和解密。
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
def generate_rsa_key():
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
return private_key
def encrypt_rsa(public_key, data):
ct = public_key.encrypt(
data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return ct
def decrypt_rsa(private_key, ct):
data = private_key.decrypt(
ct,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return data
# 生成RSA密钥对
private_key = generate_rsa_key()
public_key = private_key.public_key()
# 明文
data = b'Hello, World!'
# 加密
ct = encrypt_rsa(public_key, data)
# 解密
decrypted_data = decrypt_rsa(private_key, ct)
print(decrypted_data.decode('utf-8'))
运行结果:
Hello, World!
以上代码演示了如何使用RSA非对称加密算法对数据进行加密和解密。
3. 消息认证码(MAC)
消息认证码(Message Authentication Code,MAC)是一种用于保证消息完整性和真实性的技术,在加密通信中起到非常重要的作用。常见的MAC算法包括HMAC、CMAC等。
3.1 使用HMAC算法生成消息认证码
HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码算法,它使用密钥对消息进行签名,以防止消息被篡改。在Python中,我们可以使用cryptography
库来实现HMAC算法。
from cryptography.hazmat.primitives import hmac
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
def generate_hmac(key, data):
h = hmac.HMAC(key, hashes.SHA256(), backend=default_backend())
h.update(data)
return h.finalize()
# 密钥
key = b'1234567812345678'
# 消息
data = b'Hello, World!'
# 生成HMAC
mac = generate_hmac(key, data)
print(mac)
运行结果:
b'\x8c\x8a\x06\x99...\xcd'
以上代码演示了如何使用HMAC算法生成消息认证码。
结语
本文介绍了几种常用的加密算法及其在Python中的应用,包括对称加密算法、非对称加密算法和消息认证码。在实际应用中,根据具体需求和安全要求选择合适的加密算法,保护数据的安全性。