Python实现简单的加密和解密算法
发布时间:2023-12-04 20:21:47
加密算法是将原始数据转化为不可读的形式,解密算法则是将加密后的数据转化为可读的形式。Python中,常用的加密算法包括对称加密算法和非对称加密算法。
对称加密算法使用相同的密钥进行加密和解密,常见的对称加密算法有DES、AES等。下面是使用AES算法进行加密和解密的示例代码:
from Crypto.Cipher import AES
def encrypt(key, data):
cipher = AES.new(key, AES.MODE_ECB)
encrypted_data = cipher.encrypt(pad(data))
return encrypted_data
def decrypt(key, encrypted_data):
cipher = AES.new(key, AES.MODE_ECB)
decrypted_data = cipher.decrypt(encrypted_data)
return unpad(decrypted_data)
def pad(data):
# 对数据进行填充,使其长度为AES的倍数
length = AES.block_size
pad_length = length - (len(data) % length)
data += chr(pad_length) * pad_length
return data
def unpad(data):
# 对填充的数据进行去除
pad_length = ord(data[-1])
return data[:-pad_length]
# 使用AES算法进行加密和解密
key = b'16byteslongkey!'
data = b'some secret data'
encrypted_data = encrypt(key, data)
decrypted_data = decrypt(key, encrypted_data)
print('Encrypted data:', encrypted_data)
print('Decrypted data:', decrypted_data)
上面的代码中,我们使用了Python的Crypto.Cipher模块,导入了AES算法。encrypt()函数使用AES的ECB模式(电码本模式)对数据进行加密,decrypt()函数对加密后的数据进行解密。
需要注意的是,AES算法的密钥长度必须为16、24或32个字节(128、192或256位)。我们在这个例子中使用了一个16字节的密钥。
非对称加密算法使用一对密钥,分别为公钥和私钥。常见的非对称加密算法有RSA、DSA等。下面是使用RSA算法进行加密和解密的示例代码:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
def encrypt(public_key_path, data):
with open(public_key_path, 'rb') as f:
public_key = RSA.importKey(f.read())
cipher = PKCS1_OAEP.new(public_key)
encrypted_data = cipher.encrypt(data)
return encrypted_data
def decrypt(private_key_path, encrypted_data):
with open(private_key_path, 'rb') as f:
private_key = RSA.importKey(f.read())
cipher = PKCS1_OAEP.new(private_key)
decrypted_data = cipher.decrypt(encrypted_data)
return decrypted_data
# 使用RSA算法进行加密和解密
public_key_path = 'public.pem'
private_key_path = 'private.pem'
data = b'some secret data'
encrypted_data = encrypt(public_key_path, data)
decrypted_data = decrypt(private_key_path, encrypted_data)
print('Encrypted data:', encrypted_data)
print('Decrypted data:', decrypted_data)
上面的代码中,我们使用了Python的Crypto.PublicKey和Crypto.Cipher模块,导入了RSA算法。encrypt()函数使用了RSA的PKCS1_OAEP模式(加密填充模式),对数据进行加密,decrypt()函数对加密后的数据进行解密。
需要注意的是,在这个例子中我们使用了公钥和私钥文件,分别是public.pem和private.pem。你可以使用openssl工具生成RSA公钥和私钥对:
$ openssl genrsa -out private.pem 2048 $ openssl rsa -pubout -in private.pem -out public.pem
生成了公钥和私钥文件之后,你可以把公钥文件发送给其他人,用于加密数据,而私钥文件需要保密,用于解密数据。
总结来说,Python提供了丰富的库和模块用于实现加密和解密算法。使用这些算法可以保护数据的安全性,防止数据在传输过程中被篡改或窃取。在实际应用中,你可以根据具体的需求和场景选择合适的加密算法。
