摘要加密对称加密和非对称加密
· 阅读需 4 分钟
摘要加密(Hash Encryption)
摘要加密,通常称为哈希函数(Hash Function),是一种将任意长度的数据转换为固定长度的字符串的过程。哈希函数的结果称为哈希值或消息摘要。
主要特点
- 不可逆 ,一旦数据被哈希,原始数据无法通过哈希值逆推出。
- 定长输出 ,不论输入数据长度如何,输出的哈希值长度是固定的。
- 高效计算 ,哈希计算速度快,适合大规模数据处理。
- 抗碰撞 ,两个不同的输入数据不应该产生相同的哈希值(碰撞)。
常用算法
- MD5 ,128 位输出,已被认为不安全。
- SHA-1 ,160 位输出,已被逐步淘汰。
- SHA-256 ,256 位输出,属于 SHA-2 家族,目前被广泛使用。
应用场景
- 数据完整性验证 ,验证数据在传输过程中是否被篡改。
- 数字签名 ,生成数据的唯一摘要,以证明数据的完整性和来源。
- 密码存储 ,将密码哈希后存储,避免明文存储密码的安全风险。
import hashlib
# 计算字符串的SHA-256哈希值
data = "Hello, World!"
hash_object = hashlib.sha256(data.encode())
hash_value = hash_object.hexdigest()
print(f"哈希值: {hash_value}")
对称加密(Symmetric Encryption)
对称加密是一种加密方式,使用相同的密钥进行加密和解密。
主要特点
- 单密钥 ,加密和解密使用相同的密钥。
- 速度快 ,适合大数据量的加密。
常用算法
- AES(高级加密标准)
- DES(数据加密标准,已被淘汰)
- 3DES(三重数据加密标准)
应用场景
- 数据传输加密 ,如 HTTPS 中的数据加密。
- 文件加密 ,用于保护存储的文件数据。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 生成密钥和数据
key = get_random_bytes(16)
data = b"Secret Data"
# 创建加密对象并加密数据
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)
print(f"加密数据: {ciphertext}")
# 创建解密对象并解密数据
cipher_decrypt = AES.new(key, AES.MODE_EAX, nonce=nonce)
decrypted_data = cipher_decrypt.decrypt(ciphertext)
print(f"解密数据: {decrypted_data}")
非对称加密(Asymmetric Encryption)
非对称加密使用一对密钥 ,公钥(public key)和私钥(private key)。公钥用于加密,私钥用于解密。
主要特点
- 双密钥 ,加密和解密使用不同的密钥。
- 计算较慢 ,相较对称加密,计算速度较慢,适合少量数据的加密。
常用算法
- RSA(Rivest-Shamir-Adleman)
- ECC(椭圆曲线加密)
应用场景
- 密钥交换 ,用于交换对称加密的密钥。
- 数字签名 ,用于验证发送者身份和数据完整性。
- 安全电子邮件 ,如 PGP(Pretty Good Privacy)。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成公钥和私钥
key = RSA.generate(2048)
public_key = key.publickey()
private_key = key
# 数据加密
cipher_rsa = PKCS1_OAEP.new(public_key)
data = b"Confidential Data"
ciphertext = cipher_rsa.encrypt(data)
print(f"加密数据: {ciphertext}")
# 数据解密
cipher_rsa_decrypt = PKCS1_OAEP.new(private_key)
decrypted_data = cipher_rsa_decrypt.decrypt(ciphertext)
print(f"解密数据: {decrypted_data}")
比较
特性 | 摘要加密 | 对称加密 | 非对称加密 |
---|---|---|---|
密钥 | 无密钥 | 单密钥 | 公钥和私钥 |
方向 | 单向 | 双向 | 双向 |
用途 | 数据完整性验证、密码存储 | 大数据量传输加密、文件加密 | 密钥交换、数字签名、安全通讯 |
速度 | 快 | 快 | 慢 |
安全性 | 抗碰撞能力有限 | 依赖密钥的保密性 | 基于数学难题,安全性高 |
算法 | MD5, SHA-1, SHA-256 | AES, DES, 3DES | RSA, ECC |
总结
- 摘要加密 ,主要用于数据完整性验证,不能还原原始数据。
- 对称加密 ,适合快速、大量数据的加密与解密,但需要安全管理密钥。
- 非对称加密 ,适合安全的密钥交换和数字签名,计算复杂度较高,适合少量数据的加密。