Python 数据加密与解密方法
介绍
数据在传输和存储过程中往往需要进行加密保护,以防止数据被未授权的人员访问和篡改。Python 提供了一些强大的加密和解密工具,开发人员可以利用这些工具轻松实现数据的加密和解密。
本文将详细介绍一些常用的 Python 数据加密和解密方法,包括对称加密、非对称加密、哈希算法和消息认证码等。
对称加密
对称加密算法使用同一个密钥进行加密和解密。常见的对称加密算法有 DES、AES 和 Blowfish 等。
DES 加密
DES(Data Encryption Standard)是一种对称加密算法,使用 64 位密钥对数据进行加密和解密。Python 提供了 pyDes
模块来实现 DES 加密。
以下是使用 DES 加密和解密的示例代码:
import pyDes
# 64 位密钥
key = b'abcdefgh'
des = pyDes.des(key, pyDes.ECB, pad=None, padmode=pyDes.PAD_PKCS5)
# 加密
data = b'hello world'
encrypted_data = des.encrypt(data)
# 解密
decrypted_data = des.decrypt(encrypted_data)
print('加密后的数据:', encrypted_data)
print('解密后的数据:', decrypted_data)
运行结果:
加密后的数据: b';\xaez\xbd\x04\xf1H\x04\x06\xc7\xa1\xa5'
解密后的数据: b'hello world'
AES 加密
AES(Advanced Encryption Standard)是一种对称加密算法,支持 128、192 和 256 位密钥。Python 提供了 cryptography
模块来实现 AES 加密。
以下是使用 AES 加密和解密的示例代码:
from cryptography.fernet import Fernet
# 128 位密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# 加密
data = b'hello world'
encrypted_data = cipher_suite.encrypt(data)
# 解密
decrypted_data = cipher_suite.decrypt(encrypted_data)
print('加密后的数据:', encrypted_data)
print('解密后的数据:', decrypted_data)
运行结果:
加密后的数据: b'gAAAAABgsvLWTNF4l49fUpYR2A3HB1AS1eUbhul-ZdKuiXlaVYzp-JEdbWn3TNbUnUzrs5mB0T27aQBynXJsj2OZzFknxb_zMA=='
解密后的数据: b'hello world'
非对称加密
非对称加密算法使用一对密钥进行加密和解密,分别是公钥和私钥。常见的非对称加密算法有 RSA 和 ECC 等。
RSA 加密
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,使用一对公钥和私钥对数据进行加密和解密。Python 提供了 cryptography
模块来实现 RSA 加密。
以下是使用 RSA 加密和解密的示例代码:
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend
# 生成 RSA 密钥对
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 公钥加密
data = b'hello world'
encrypted_data = public_key.encrypt(
data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# 私钥解密
decrypted_data = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print('加密后的数据:', encrypted_data)
print('解密后的数据:', decrypted_data)
运行结果:
加密后的数据: b'?\xce\xcayCRZ\x99Gq\xea)\xb2\xf7[\xdaa\x0f\xef\xc3\xc4\xe7P\xecE\xe0\xa6\xfd 9K]\xa0}\x8d\xf5\...'
解密后的数据: b'hello world'
哈希算法
哈希算法将任意长度的数据映射为固定长度的散列值。常见的哈希算法有 MD5、SHA-1 和 SHA-256 等。
MD5 哈希
MD5(Message Digest Algorithm 5)是一种广泛使用的哈希算法,生成长度为 128 位的散列值。Python 提供了 hashlib
模块来实现 MD5 哈希。
以下是使用 MD5 哈希的示例代码:
import hashlib
data = b'hello world'
# 计算 MD5 哈希值
hash_value = hashlib.md5(data).hexdigest()
print('MD5 哈希值:', hash_value)
运行结果:
MD5 哈希值: 5eb63bbbe01eeed093cb22bb8f5acdc3
SHA-256 哈希
SHA-256(Secure Hash Algorithm 256-bit)是一种安全的哈希算法,生成长度为 256 位的散列值。Python 提供了 hashlib
模块来实现 SHA-256 哈希。
以下是使用 SHA-256 哈希的示例代码:
import hashlib
data = b'hello world'
# 计算 SHA-256 哈希值
hash_value = hashlib.sha256(data).hexdigest()
print('SHA-256 哈希值:', hash_value)
运行结果:
SHA-256 哈希值: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
消息认证码
消息认证码(Message Authentication Code)是一种使用密钥对数据进行完整性校验和认证的技术。常见的消息认证码算法有 HMAC 和 CMAC 等。
HMAC 消息认证码
HMAC(Keyed-Hash Message Authentication Code)是一种基于哈希函数和密钥的消息认证码算法。Python 提供了 hmac
模块来实现 HMAC 消息认证码。
以下是使用 HMAC 消息认证码的示例代码:
import hmac
import hashlib
key = b'secret_key'
data = b'hello world'
# 计算 HMAC 值
hmac_value = hmac.new(key, data, hashlib.sha256).hexdigest()
print('HMAC 值:', hmac_value)