[Python数据加密]——MD5、SHA、AES、RSA
一、Python数据加密介绍
数据加密是信息安全领域的一个重要组成部分,它用于保护数据不被未授权访问。以下是一些常见的加密算法和方法:
MD5 (Message Digest Algorithm 5):
一种广泛使用的哈希函数,可以产生128位的哈希值。 通常用于验证文件完整性,但因为其易受到碰撞攻击,不推荐用于需要高安全性的场合。
SHA (Secure Hash Algorithm):
一系列密码散列函数,包括SHA-1、SHA-2(如SHA-256、SHA-512)和SHA-3。 比MD5更安全,能产生更长的哈希值,用于确保数据的完整性和验证。
AES (Advanced Encryption Standard):
一种对称密钥加密标准,使用128位、192位或256位的密钥。 非常安全,广泛用于保护数据传输和存储。
RSA:
一种非对称加密算法,基于大整数分解的困难性。 通常用于安全的数据传输,数字签名和密钥交换。 RSA算法使用两个密钥:一个公钥用于加密,一个私钥用于解密。
二、Python数据加密示例
1、MD5是一种广泛使用的哈希函数,可以生成128位的哈希值。以下是使用Python语言实现MD5加密的代码示例:
import hashlib
# 待加密的原始字符串
original_string = 'Hello, World!'
# 创建md5对象
md5_obj = hashlib.md5()
# 对原始字符串进行编码,因为md5需要bytes类型的数据
md5_obj.update(original_string.encode())
# 获取md5加密后的十六进制字符串
md5_digest = md5_obj.hexdigest()
print("MD5 Digest:", md5_digest)
2、可以使用内置的hashlib
库来实现SHA哈希算法。以下是使用SHA-256算法对字符串进行哈希加密的示例代码:
import hashlib
# 待加密的原始字符串
original_string = 'Hello, World!'
# 创建sha256对象
sha256_obj = hashlib.sha256()
# 对原始字符串进行编码,因为sha256需要bytes类型的数据
sha256_obj.update(original_string.encode())
# 获取sha256加密后的十六进制字符串
sha256_digest = sha256_obj.hexdigest()
print("SHA-256 Digest:", sha256_digest)
3、可以使用cryptography
库来实现AES加密。以下是一个使用AES加密算法的示例代码,这个例子使用128位的密钥和CBC模式(Cipher Block Chaining)进行加密:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend
import os
# 待加密的原始数据
data = b'Hello, World!'
# AES密钥长度可以是16, 24, 32字节,分别对应AES-128, AES-192, AES-256
key = os.urandom(16) # 生成一个随机的16字节密钥
iv = os.urandom(16) # 生成一个随机的16字节初始化向量
# 创建一个AES Cipher对象
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
# 对数据进行填充,确保其长度是块大小的整数倍
padder = padding.PKCS7(algorithms.AES.block_size).padder()
data = padder.update(data) + padder.finalize()
# 加密数据
encryptor = cipher.encryptor()
encrypted_data = encryptor.update(data) + encryptor.finalize()
print("Encrypted data:", encrypted_data)
# 为了演示解密,我们在这里也提供解密的代码
# 创建一个解密的Cipher对象
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()
# 解密数据
decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
# 去除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
decrypted_data = unpadder.update(decrypted_data) + unpadder.finalize()
print("Decrypted data:", decrypted_data)
4、使用cryptography
库来实现RSA加密和解密。以下是一个使用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
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!'
# RSA加密
encrypted = public_key.encrypt(
data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Encrypted data:", encrypted)
# RSA解密
decrypted = private_key.decrypt(
encrypted,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Decrypted data:", decrypted)
# 保存私钥到文件
with open('private_key.pem', 'wb') as f:
f.write(private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
))
# 加载私钥
with open('private_key.pem', 'rb') as f:
loaded_private_key = serialization.load_pem_private_key(
f.read(),
password=None,
backend=default_backend()
)
# 确保加载的私钥与原始私钥相同
assert private_key == loaded_private_key
三、Python数据加密完结
每种加密方法都有其特定的用途和安全级别。选择哪种加密方法取决于你的具体需求,比如需要保护的数据类型、安全要求、性能考虑等。在实际应用中,通常需要结合使用多种加密技术来达到最佳的安全效果。
作者:CnLg.NJ