python-AES-CBC加密

本文详细介绍了如何使用Python的Crypto库进行AES加密,包括参数处理、CBC模式和Base64编码的运用,提供了一个加密函数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

BLOCK_SIZE = 16
KEY = '' # 密钥
IV = '' # 偏移量

def aes_encrypt(text, timestamp=None, in_key=None):
    """
    AES加密
    :param text:
    :return:
    """
    print(f"传入的参数text= {text}, timestamp= {timestamp}, in_key= {in_key}")
    text = bytes(str(text), 'utf-8')
    print(f"密钥key的类型= {type(key)}")
    if isinstance(key, str):
        key = key.encode('utf-8')
        print(f"转换后的密钥key的类型= {type(key)}")
    cipher = AES.new(key, AES.MODE_CBC, IV)
    # 加密
    ciphertext = cipher.encrypt(pad(text, BLOCK_SIZE))
    # 返回 base64 编码的密文字符串
    b64_ciphertext = base64.b64encode(ciphertext).decode()
    print(f"加密后参数= {b64_ciphertext}")
    return b64_ciphertext
Python-AES 指的是基于 PythonAES (高级加密标准) 实现库。AES 是一种对称加密算法,由美国国家标准技术研究所(NIST)于2001年采纳作为联邦信息处理标准,并广泛用于各种安全通信领域。 ### Python-AES 库的功能特性: 1. **加密与解密**:Python-AES 允许用户将数据从明文转换成密文(加密),以及将密文转换回明文(解密)。这依赖于预先设置的密钥和模式(如 CBC、CFB 等)。 2. **多种模式支持**:除了基本的 ECB(电子密码本)模式外,还有更复杂的模式如 CBC(密码块链接)、CFB(密码反馈)等,用于提供更好的安全性并避免特定类型的攻击(如块碰撞攻击)。 3. **自定义密钥长度**:通常,AES 使用128位、192位或256位的密钥长度,通过 Python-AES 可以轻松调整到所需的密钥长度,适应不同的安全需求。 4. **高效性能优化**:一些实现会针对现代处理器进行优化,以提高加密和解密的速度,尤其是在处理大量数据时更为关键。 5. **跨平台兼容性**:作为 Python 库的一部分,Python-AES 具有良好的跨平台兼容性,可以在 Windows、Linux 和 macOS 上无缝运行。 ### 安装与使用示例: 安装 Python-AES 类似于安装其他 Python 包一样简单: ```bash pip install pycryptodome ``` 请注意,虽然`pycryptodome`包包含了类似功能,但它是一个独立的库,并不是所有版本都直接称为“Python-AES”。实际上,“Crypto”模块是其内部的一个部分,提供了包括AES在内的多种加密算法的支持。 下面是简单的使用示例: ```python from Crypto.Cipher import AES import os def encrypt(plaintext, key): cipher = AES.new(key, AES.MODE_CBC) # 对齐处理 block_size_padding = 16 - len(plaintext) % 16 plaintext += bytes([block_size_padding]) * block_size_padding encrypted_data = cipher.encrypt(plaintext) return (encrypted_data, cipher.iv) def decrypt(ciphertext, key): iv = ciphertext cipher = AES.new(key, AES.MODE_CBC, iv=iv) decrypted_data = cipher.decrypt(ciphertext) padding_length = decrypted_data[-1] return decrypted_data[:-padding_length] # 示例密钥和明文 key = b'Sixteen byte key' plaintext = b'This is a secret message.' ciphertext, iv = encrypt(plaintext, key) decrypted_text = decrypt(ciphertext, key) print("Encrypted:", ciphertext) print("Decrypted:", decrypted_text.decode('utf-8')) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天说够一万句废话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值