Python编写的文本加密案例:使用加密算法对密码进行加密
发布时间:2023-12-04 19:34:30
在Python中,可以使用多种加密算法对文本进行加密。以下是一个使用AES(高级加密标准)算法对密码进行加密的案例:
import base64
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
def encrypt_password(password, key):
# 生成一个随机的16字节的密钥向量
iv = get_random_bytes(16)
# 使用密钥和向量创建一个AES加密对象
cipher = AES.new(key, AES.MODE_CBC, iv)
# 使用PKCS7填充方式,加密密码
padded_password = pad_password(password)
encrypted_password = cipher.encrypt(padded_password.encode())
# 返回加密后的密码和向量
return encrypted_password.hex(), base64.b64encode(iv).decode()
def decrypt_password(encrypted_password, iv, key):
# 将向量解码为字节
iv = base64.b64decode(iv)
# 使用密钥和向量创建一个AES解密对象
cipher = AES.new(key, AES.MODE_CBC, iv)
# 解密密码并去掉填充
decrypted_password = cipher.decrypt(bytes.fromhex(encrypted_password)).decode()
unpadded_password = unpad_password(decrypted_password)
# 返回解密后的密码
return unpadded_password
def pad_password(password):
# 计算需要填充的字节数
padding_bytes = AES.block_size - (len(password) % AES.block_size)
# 使用PKCS7填充方式,填充密码
padded_password = password + padding_bytes * chr(padding_bytes)
return padded_password
def unpad_password(password):
# 获取填充的字节数
padding_bytes = ord(password[-1])
# 去掉填充
unpadded_password = password[:-padding_bytes]
return unpadded_password
# 使用随机生成的密钥
key = get_random_bytes(32)
# 输入明文密码
password = input("请输入密码:")
# 加密密码
encrypted_password, iv = encrypt_password(password, key)
print("加密后的密码:", encrypted_password)
print("密钥向量:", iv)
# 解密密码
decrypted_password = decrypt_password(encrypted_password, iv, key)
print("解密后的密码:", decrypted_password)
在上述代码中,我们使用了Crypto库提供的AES模块来实现加密和解密功能。首先,我们需要生成一个16字节的随机密钥向量,并使用该密钥向量和密钥创建一个AES加密对象。然后,我们使用PKCS7填充方式对输入的密码进行填充,并将填充后的密码通过AES加密对象进行加密。最后,我们将加密后的密码和密钥向量返回。
在解密函数中,我们接收加密后的密码、密钥向量和密钥作为输入。首先,我们对密钥向量进行解码,并使用解码后的向量和密钥创建一个AES解密对象。然后,我们使用解密对象对加密后的密码进行解密,并去掉填充。最后,我们返回解密后的密码。
通过运行上述代码,我们可以输入一个明文密码并将其加密,然后再解密得到原始的明文密码。这样可以确保密码在传输和存储过程中的安全性。
