Python AES加密

AES(Advanced Encryption Standard)是一种对称密钥加密算法,用于保护敏感数据。在Python中,你可以使用 cryptography 库来实现AES加密。以下是一个简单的使用AES加密的程序,同时提供了详细的描述:

安装 cryptography 库

首先,确保你已经安装了 cryptography 库。你可以使用以下命令来安装:

pip install cryptography

AES加密程序

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from base64 import b64encode, b64decode

def generate_key():
    # 生成一个随机的32字节密钥
    return b64encode(os.urandom(32))

def pad(text):
    # PKCS7填充
    block_size = 16
    padding_size = block_size - len(text) % block_size
    padding = bytes([padding_size] * padding_size)
    return text + padding

def unpad(text):
    # 去除PKCS7填充
    padding_size = text[-1]
    return text[:-padding_size]

def encrypt(plaintext, key):
    backend = default_backend()
    cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
    encryptor = cipher.encryptor()
    padded_plaintext = pad(plaintext.encode('utf-8'))
    ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
    return b64encode(ciphertext).decode('utf-8')

def decrypt(ciphertext, key):
    backend = default_backend()
    cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
    decryptor = cipher.decryptor()
    ciphertext_bytes = b64decode(ciphertext)
    padded_plaintext = decryptor.update(ciphertext_bytes) + decryptor.finalize()
    return unpad(padded_plaintext).decode('utf-8')

def main():
    key = generate_key()
    plaintext = input("请输入要加密的文本:")

    encrypted_text = encrypt(plaintext, key)
    decrypted_text = decrypt(encrypted_text, key)

    print("\n加密后的文本:", encrypted_text)
    print("解密后的文本:", decrypted_text)

if __name__ == "__main__":
    main()
详细描述:
  1. generate_key 函数用于生成一个随机的32字节密钥,这是AES的标准密钥长度(256位)。

  2. padunpad 函数用于进行PKCS7填充和去除填充。在AES中,数据需要被块大小整除,所以可能需要进行填充。

  3. encrypt 函数接受明文和密钥作为输入,使用AES算法和ECB模式对明文进行加密。

  4. decrypt 函数接受密文和密钥作为输入,使用AES算法和ECB模式对密文进行解密。

  5. main 函数获取用户输入的明文,生成一个随机密钥,然后使用该密钥对明文进行加密和解密。最后,打印加密和解密后的文本。

请注意,ECB模式是一种基础模式,对于相同的明文块,生成的密文块是相同的,这可能导致一些安全性问题。在实际应用中,可能需要考虑使用其他更安全的模式,例如CBC。此外,密钥的生成也可能需要更复杂的处理,具体取决于你的安全需求。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值