Python中常见的加密解密算法总结
在Python中,有许多常见的加密解密算法,包括对称加密算法、非对称加密算法、哈希算法等。本文将对这些算法进行总结,并提供两个示例说明。
对称加密算法
对称加密算法是一种加密方式,它使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES、3DES等。
示例1:使用AES对称加密算法加密和解密数据
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
def encrypt_AES_GCM(data, key):
cipher = AES.new(key, AES.MODE_GCM)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)
return nonce + ciphertext + tag
def decrypt_AES_GCM(ciphertext, key):
nonce = ciphertext[:16]
tag = ciphertext[-16:]
ciphertext = ciphertext[16:-16]
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
data = cipher.decrypt_and_verify(ciphertext, tag)
return data
key = get_random_bytes(16)
data = b'Hello, world!'
ciphertext = encrypt_AES_GCM(data, key)
plaintext = decrypt_AES_GCM(ciphertext, key)
print('Key:', key)
print('Ciphertext:', ciphertext)
print('Plaintext:', plaintext)
在这个示例中,我们使用Crypto库中的AES模块实现了对称加密算法。我们首先定义了encrypt_AES_GCM和decrypt_AES_GCM两个函数,分别用于加密和解密数据。我们使用get_random_bytes函数生成一个16字节的随机密钥key。我们使用AES.new函数创建一个AES对象cipher,并使用MODE_GCM模式进行加密。我们使用cipher.nonce获取一个16字节的随机数nonce,使用cipher.encrypt_and_digest函数对数据进行加密,并获取密文ciphertext和tag。我们将nonce、ciphertext和tag拼接在一起,返回加密后的数据。
在decrypt_AES_GCM函数中,我们首先从密文中获取nonce和tag,使用ciphertext[16:-16]获取加密后的数据。我们使用AES.new函数创建一个AES对象cipher,并使用MODE_GCM模式进行解密。我们使用cipher.decrypt_and_verify函数对数据进行解密,并获取明文data。最后,我们返回解密后的数据。
在主程序中,我们使用get_random_bytes函数生成一个16字节的随机密钥key,使用b'Hello, world!'作为待加密的数据。我们使用encrypt_AES_GCM函数对数据进行加密,使用decrypt_AES_GCM函数对数据进行解密。最后,我们输出密钥、密文和明文。
非对称加密算法
非对称加密算法是一种加密方式,它使用公钥和私钥进行加密和解密。常见的非对称加密算法包括RSA、DSA、ECC等。
示例2:使用RSA非对称加密算法加密和解密数据
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
def encrypt_RSA_OAEP(data, public_key):
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(data)
return ciphertext
def decrypt_RSA_OAEP(ciphertext, private_key):
cipher = PKCS1_OAEP.new(private_key)
data = cipher.decrypt(ciphertext)
return data
key = RSA.generate(2048)
public_key = key.publickey()
private_key = key
data = b'Hello, world!'
ciphertext = encrypt_RSA_OAEP(data, public_key)
plaintext = decrypt_RSA_OAEP(ciphertext, private_key)
print('Public key:', public_key.export_key())
print('Private key:', private_key.export_key())
print('Ciphertext:', ciphertext)
print('Plaintext:', plaintext)
在这个示例中,我们使用Crypto库中的RSA模块实现了非对称加密算法。我们首先定义了encrypt_RSA_OAEP和decrypt_RSA_OAEP两个函数,分别用于加密和解密数据。我们使用RSA.generate函数生成一个2048位的RSA密钥对key,使用key.publickey()获取公钥public_key,使用key获取私钥private_key。
在encrypt_RSA_OAEP函数中,我们使用PKCS1_OAEP.new函数创建一个PKCS1_OAEP对象cipher,并使用公钥进行加密。我们使用cipher.encrypt函数对数据进行加密,并获取密文ciphertext。最后,我们返回加密后的数据。
在decrypt_RSA_OAEP函数中,我们使用PKCS1_OAEP.new函数创建一个PKCS1_OAEP对象cipher,并使用私钥进行解密。我们使用cipher.decrypt函数对数据进行解密,并获取明文data。最后,我们返回解密后的数据。
在主程序中,我们使用RSA.generate函数生成一个2048位的RSA密钥对key,使用b'Hello, world!'作为待加密的数据。我们使用encrypt_RSA_OAEP函数对数据进行加密,使用decrypt_RSA_OAEP函数对数据进行解密。最后,我们输出公钥、私钥、密文和明文。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中常见的加密解密算法总结 - Python技术站