用cmd更新pip

pip install --upgrade pip

用cmd安装cryptography库:

pip install cryptography

完整代码

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import os

# 生成一个128位的密钥和初始化向量
key = os.urandom(16)  # 生成一个16字节的随机密钥,即128位
iv = os.urandom(16)   # 生成一个16字节的随机初始化向量

# 加密函数
def encrypt(plaintext):
    padder = padding.PKCS7(algorithms.AES.block_size).padder()  # 创建一个PKCS7填充器,块大小为AES的块大小
    padded_data = padder.update(plaintext) + padder.finalize()  # 对明文进行填充,以满足块大小要求
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv))  # 创建一个AES加密器,使用CBC模式
    encryptor = cipher.encryptor()  # 获取加密器的实例
    ciphertext = encryptor.update(padded_data) + encryptor.finalize()  # 加密填充后的明文
    return ciphertext  # 返回密文

# 解密函数
def decrypt(ciphertext):
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv))  # 创建一个AES解密器,使用CBC模式
    decryptor = cipher.decryptor()  # 获取解密器的实例
    try:
        padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()  # 解密密文
        unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()  # 创建一个PKCS7解填充器
        plaintext = unpadder.update(padded_plaintext) + unpadder.finalize()  # 去除填充
        return plaintext  # 返回解密后的明文
    except ValueError as e:  # 捕获解密过程中可能出现的错误
        print(f"Decryption failed: {e}")  # 打印错误信息
        return None  # 返回None表示解密失败

# 主程序循环
def main_loop():
    while True:  # 无限循环,直到用户选择退出
        choice = input("请选择(1)加密 或 (2)解密 或 (0)退出程序: ").lower()  # 获取用户输入
        if choice == '1':
            # 获取用户输入并加密
            plaintext = input("请输入明文: ").encode('utf-8')  # 将用户输入的明文编码为字节串
            encrypted = encrypt(plaintext)  # 调用加密函数
            print(f"密文: {encrypted.hex()}")  # 打印十六进制编码的密文
        elif choice == '2':
            # 获取用户输入并解密
            user_input = input("请输入密文(十六进制编码文本): ")  # 获取用户输入的密文
            try:
                ciphertext = bytes.fromhex(user_input)  # 将十六进制编码文本转换为字节串
                decrypted = decrypt(ciphertext)  # 调用解密函数
                if decrypted is not None:  # 如果解密成功
                    print(f"明文: {decrypted.decode('utf-8')}")  # 打印解密后的明文
            except ValueError:  # 捕获转换错误
                print("输入无效,请确保输入正确的十六进制编码文本")  # 提示用户输入错误
        elif choice == '0':
            print("退出程序")  # 打印退出信息
            break  # 退出循环
        else:
            print("无效选择,请输入 1 进行加密,或 2 进行解密,或 0 退出程序")  # 提示用户输入无效

if __name__ == "__main__":
    main_loop()  # 如果该脚本被直接运行,则调用主程序循环


 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐