欢迎访问宙启技术站
智能推送

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解密对象。然后,我们使用解密对象对加密后的密码进行解密,并去掉填充。最后,我们返回解密后的密码。

通过运行上述代码,我们可以输入一个明文密码并将其加密,然后再解密得到原始的明文密码。这样可以确保密码在传输和存储过程中的安全性。