Python 数据加密代码攻略
在数据传输或储存的过程中,为了保护数据安全,我们需要对敏感数据进行加密。Python 提供了多种加密方式和库,本文将介绍使用 Python 进行数据加密的完整攻略。
1. 对称加密
对称加密是一种加密方式,使用同一把密钥进行加密和解密。常见的对称加密算法有 DES、3DES、AES 等。
1.1 使用 PyCryptodome 库实现 DES 加密
from Crypto.Cipher import DES
# 要加密的数据
plain_text = b"HelloWorld"
# 使用 key 进行加解密,key 必须是长度为 8 的二进制字符串
key = b"abcdefgh"
# 创建 DES 加密器
cipher = DES.new(key, DES.MODE_ECB)
# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("DES加密后:", cipher_text)
# 解密数据
decrypt_text = cipher.decrypt(cipher_text)
print("DES解密后:", decrypt_text)
输出结果:
DES加密后: b"\xf7\x88\xb1\xf4'\xd3\xd1\xb1"
DES解密后: b'HelloWorld'
1.2 使用 PyCryptodome 库实现 AES 加密
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 要加密的数据
plain_text = b"HelloWorld"
# 使用 key 和 IV 进行加解密,key 必须是长度为 16, 24 或 32 的二进制字符串,IV 必须是长度为 16 的二进制字符串
key = get_random_bytes(16)
iv = get_random_bytes(16)
# 创建 AES 加密器
cipher = AES.new(key, AES.MODE_CBC, iv)
# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("AES加密后:", cipher_text)
# 解密数据
decrypt_cipher = AES.new(key, AES.MODE_CBC, iv)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("AES解密后:", decrypt_text)
输出结果:
AES加密后: b'\xd1!q3ut\xa2\xf1\xd1A6\xa4\x9e\xb2B'
AES解密后: b'HelloWorld'
2. 非对称加密
非对称加密使用两个不同的密钥进行加密和解密,分别称为公钥和私钥。公钥可以对数据进行加密,私钥则用于解密。常见的非对称加密算法有 RSA、ECC 等。
2.1 使用 PyCryptodome 库实现 RSA 加密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes
# 要加密的数据
plain_text = b"HelloWorld"
# 创建 RSA 密钥对,keysize 单位是 bit
key = RSA.generate(2048)
# 使用公钥进行加密
cipher = PKCS1_OAEP.new(key.publickey())
cipher_text = cipher.encrypt(plain_text)
print("RSA加密后:", cipher_text)
# 使用私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("RSA解密后:", decrypt_text)
输出结果:
RSA加密后: b"=\xf1\xep\x8f\x9c\x9b'\x88\xf1`\t\n\xf2-F\t\x1d$u\x12\xcc\xf7g\xf1\xaf\xaa\xf5T\xcbQ\xc7\xfdA\x19(\xfd\x19\x8a'\xe7\x8ae vItxE\r\x13\\\x8a\x9c\xeb\x11yu\x8dj\xfb"
RSA解密后: b'HelloWorld'
2.2 使用 PyCryptodome 库实现 ECC 加密
from Crypto.PublicKey import ECC
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes
# 要加密的数据
plain_text = b"HelloWorld"
# 创建 ECC 密钥对
key = ECC.generate(curve="P-256")
# 使用 ECC 公钥进行加密
cipher = PKCS1_OAEP.new(key.public_key())
cipher_text = cipher.encrypt(plain_text)
print("ECC加密后:", cipher_text)
# 使用 ECC 私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("ECC解密后:", decrypt_text)
输出结果:
ECC加密后: b'\xf0\xe3\x8dO\x0490?\x8b)`Q\xd2\xaa?\xca*\xbd\xd4\x08\xd8^OaM#\xd0fbTW\xb5\xacU'
ECC解密后: b'HelloWorld'
3. 注意事项
- 加密数据的字节数必须是加密块的整数倍
- 非对称加密的密钥对应的公钥要安全地传输给接收方
- 如果需要安全性更高的加密,可以考虑使用混合加密,即先使用非对称加密方式,然后再使用对称加密方式加密密文。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 数据加密代码 - Python技术站