加密原理3-代码
对称加密是一种加密方式,它使用同一个密钥(称为“共享密钥”)来加密和解密数据。其核心原理是通过数学算法对明文进行转换,使得转换后的密文在没有密钥的情况下无法被还原。
对称加密的基本流程
- 密钥生成:通信双方事先协商或生成一个共享密钥。
- 加密过程:发送方使用密钥和加密算法将明文转换为密文。
- 传输密文:通过不安全的信道(如网络)传输密文。
- 解密过程:接收方使用相同的密钥和对应的解密算法将密文还原为明文。
核心加密算法示例
以 AES(高级加密标准) 为例,它是目前最流行的对称加密算法之一:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64# 1. 生成或获取共享密钥(必须是16、24或32字节长度)
key = b"this_is_a_secret_key_32bytes_long!" # 32字节 = 256位# 2. 创建加密器实例
cipher = AES.new(key, AES.MODE_CBC) # 使用CBC模式,需要初始化向量(IV)# 3. 准备明文并加密
plaintext = "Hello, AES encryption!"
padded_plaintext = pad(plaintext.encode('utf-8'), AES.block_size) # 填充到16字节倍数
ciphertext = cipher.encrypt(padded_plaintext)# 4. 保存初始化向量(IV)和密文
iv = cipher.iv
encrypted_data = base64.b64encode(iv + ciphertext).decode('utf-8')
print(f"加密后的数据: {encrypted_data}")# 5. 解密过程(接收方)
received_data = base64.b64decode(encrypted_data)
iv = received_data[:AES.block_size]
ciphertext = received_data[AES.block_size:]# 6. 创建解密器实例并解密
decipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(decipher.decrypt(ciphertext), AES.block_size)
print(f"解密后的明文: {decrypted_data.decode('utf-8')}")
加密模式的作用
不同的加密模式决定了如何处理块加密(将明文分成固定大小的块):
- ECB(电子密码本):最简单但不安全,相同明文生成相同密文。
- CBC(密码块链接):引入初始化向量(IV),增强安全性,需填充数据。
- CTR(计数器):转为流加密,无需填充,支持并行计算。
- GCM(伽罗瓦/计数器模式):提供加密和认证,常用于TLS。
常见对称加密算法
算法 | 密钥长度 | 块大小 | 特点 |
---|---|---|---|
DES | 56位(已淘汰) | 64位 | 早期标准,安全性低 |
3DES | 112/168位 | 64位 | DES的增强版,性能较低 |
AES | 128/192/256位 | 128位 | 目前最安全和流行的标准 |
ChaCha20 | 256位 | 无 | 流加密,性能高,移动端友好 |
对称加密的优缺点
- 优点:
- 加密和解密速度快,适合处理大量数据。
- 算法公开,安全性主要依赖密钥。
- 缺点:
- 密钥分发困难:需通过安全信道共享密钥。
- 密钥管理复杂:每对通信方需要独立密钥。
- 扩展性差:用户数量增多时,密钥数量呈指数增长。
实际应用场景
- 数据存储加密:加密硬盘、数据库中的敏感数据。
- 网络通信:TLS协议中使用对称加密传输数据。
- 文件加密:如ZIP加密、PGP加密文件。
与非对称加密的结合
实际中,对称加密常与非对称加密(如RSA)结合使用:
- 使用非对称加密安全地交换对称密钥。
- 使用对称密钥快速加密大量数据。
这种混合模式既解决了密钥分发问题,又保持了加密效率。