python AES

一,安装

win:

pip install pycryptodome

linux:

pip install pycrypto

二,AES - ECB模式

  • 纯ecb,便于理解

import os

try:
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
except:
    os.system("pip install pycrypto")
    os.system("pip install pycryptodome")
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad


class AesUtils:
    """Aes[ECB]加解密"""

    @staticmethod
    def ecb_encrypt(mingwen: str, key: str):
        """ECB 加密"""
        # 补足指定字节数 Padding
        pad_key = pad(key.encode(), block_size=AES.key_size[2], style="pkcs7")
        pad_mingwen = pad(mingwen.encode(), block_size=AES.block_size, style="pkcs7")
        # 加密
        obj = AES.new(pad_key, AES.MODE_ECB)
        miwen = obj.encrypt(pad_mingwen)
        return miwen

    @staticmethod
    def ecb_decrypt(miwen: bytes, key: str):
        """ECB 解密"""
        # 解除加密时对key的补充
        pad_key = pad(key.encode(), block_size=AES.key_size[2], style="pkcs7")
        # 解密
        obj = AES.new(pad_key, AES.MODE_ECB)
        pad_mingwen = obj.decrypt(miwen)
        # 解除加密时对明文的填充
        mingwen = unpad(pad_mingwen, block_size=AES.block_size, style="pkcs7")
        return mingwen.decode()


if __name__ == "__main__":
    # 一个汉字两个字节
    text = "我是需要加密的明文"
    # Key 必须是16字节(*AES-128*), 24字节(*AES-192*),32字节(*AES-256*)
    key = "abcdfeghijklmnop"
    #####################################################################
    # 加密过程中ÿ
### 使用PyCryptodome库实现AES加密 在Python中,`PyCryptodome` 是一个强大的密码学库,支持多种对称加密算法,其中包括高级加密标准(AES)。以下是关于如何使用该库来实现AES加密的具体方法。 #### 安装PyCryptodome 要使用 `PyCryptodome` 库,需先安装它。可以通过以下命令完成安装: ```bash pip install pycryptodome ``` #### AES加密的基本流程 AES是一种分组加密算法,通常使用的密钥长度为128位、192位或256位。其基本操作包括初始化向量(IV)、填充模式以及加解密函数的选择。下面是一个完整的示例代码: #### 示例代码:AES加密与解密 ```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto.Util.Padding import pad, unpad def encrypt_data(key, plaintext): cipher = AES.new(key, AES.MODE_CBC, iv=get_random_bytes(16)) # 创建AES对象并设置CBC模式 padded_plaintext = pad(plaintext.encode(), AES.block_size) # 对明文进行填充以满足块大小要求 ciphertext = cipher.encrypt(padded_plaintext) # 执行加密 return (cipher.iv, ciphertext) def decrypt_data(key, iv, ciphertext): decipher = AES.new(key, AES.MODE_CBC, iv=iv) # 初始化用于解密的AES对象 decrypted_padded_text = decipher.decrypt(ciphertext) # 进行解密 original_text = unpad(decrypted_padded_text, AES.block_size) # 移除填充恢复原始数据 return original_text.decode() # 测试用例 if __name__ == "__main__": key = b'16byteslengthkey!' # 密钥必须是16字节长 message = "This is a secret message." iv, encrypted_message = encrypt_data(key, message) print(f"Encrypted Message: {encrypted_message.hex()}") # 输出十六进制表示的密文 decrypted_message = decrypt_data(key, iv, encrypted_message) print(f"Decrypted Message: {decrypted_message}") # 验证解密后的消息是否一致 ``` 上述代码展示了如何利用 `PyCryptodome` 实现基于AES-CBC模式的加密和解密[^4]。注意,在实际应用中应妥善保管密钥,并考虑随机化初始向量(IV),以增强安全性。 #### 关键点说明 - **密钥管理**:AES需要固定长度的密钥(如128/192/256比特)。如果用户提供的是字符串形式的密钥,则可能需要用哈希函数将其转换成合适的二进制格式。 - **填充机制**:由于AES是对固定大小的数据块进行操作,因此当最后一个数据块不足时会自动补充特定字符序列。这里采用了PKCS7填充方式。 - **工作模式选择**:除了常用的CBC模式外,还有ECB、CTR等多种选项可供选用。推荐优先采用带有IV参数的工作模式以提高抗攻击能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值