python简单加密解密

"""
@作 者: Edison
@日 期: 2020/9/3
@文件名: cryptogram.py
@功能简介:  加密解密模块,支持中文
"""
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

KEY = 'JMT-ABC-FG7-FRI0'


class Crypto:
    AES_LENGTH = 16

    def __init__(self, key: str = KEY) -> None:
        self.key = str(key).zfill(16)[:16].encode()
        self.mode = AES.MODE_ECB
        self.cryptic = AES.new(self.key, self.mode)

    def text_processor(self, text: str) -> str:
        # 支持中文 -> text.encode('utf-8')
        return text + " " * (self.AES_LENGTH - len(text.encode('utf-8')) % self.AES_LENGTH)

    def encrypt(self, text: str) -> bytes:
        # 加密
        return b2a_hex(self.cryptic.encrypt(self.text_processor(text).encode()))

    def decrypt(self, bytecode: bytes) -> str:
        # 解密
        return self.cryptic.decrypt(a2b_hex(bytecode)).decode().rstrip()

### 使用Python实现简单加密解密程序 以下是基于`pycryptodome`库的一个简单AES加密和解密的示例代码。此代码展示了如何使用对称加密算法来保护数据的安全性。 #### 安装依赖库 在运行以下代码之前,请确保已安装`pycryptodome`库。可以通过pip命令安装: ```bash pip install pycryptodome ``` #### 加密与解密代码示例 下面是一段完整的Python代码,用于演示AES加密和解密的过程: ```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes import base64 def pad(text, block_size=16): """填充函数""" padding_length = block_size - (len(text) % block_size) return text + bytes([padding_length]) * padding_length def unpad(padded_text): """去填充函数""" last_byte = padded_text[-1] return padded_text[:-last_byte] def encrypt(plain_text, key): """ 对明文进行AES加密 :param plain_text: 明文字节串 :param key: 密钥字节串 :return: Base64编码后的密文 """ cipher = AES.new(key, AES.MODE_CBC, iv=get_random_bytes(16)) padded_plain_text = pad(plain_text.encode('utf-8')) encrypted_data = cipher.encrypt(padded_plain_text) return base64.b64encode(cipher.iv + encrypted_data).decode('utf-8') def decrypt(encrypted_text, key): """ 解密Base64编码的密文 :param encrypted_text: 已加密的数据(Base64编码) :param key: 密钥字节串 :return: 原始明文 """ raw_encrypted_data = base64.b64decode(encrypted_text) iv = raw_encrypted_data[:16] cipher = AES.new(key, AES.MODE_CBC, iv=iv) decrypted_padded_data = cipher.decrypt(raw_encrypted_data[16:]) return unpad(decrypted_padded_data).decode('utf-8') if __name__ == "__main__": secret_key = b'your_secret_key_16' # 需要长度为16、24或32字节的密钥 message = "This is a test message." encrypted_message = encrypt(message, secret_key) print(f"Encrypted Message: {encrypted_message}") decrypted_message = decrypt(encrypted_message, secret_key) print(f"Decrypted Message: {decrypted_message}") ``` 上述代码实现了基本的AES CBC模式加解密功能[^1]。其中,`encrypt` 函数负责将输入的字符串转换成经过AES加密并用Base64编码的结果;而 `decrypt` 则完成相反的操作——从Base64编码恢复原始消息。 注意:为了使这段脚本正常工作,必须提供一个固定大小(如16字节)的有效密钥作为参数传递给这两个函数调用处。 #### 关于其他加密方式的选择 除了AES之外还有许多其他的加密技术可供选择,比如DES等传统标准以及现代更安全的方法如ChaCha20-Poly1305等等。不过对于大多数应用场景而言,AES已经足够强大且高效了[^3]。 #### 提醒事项 当涉及到实际生产环境中的敏感信息安全保障时,请务必遵循最佳实践指南,并考虑采用更为复杂的方案以增强防护力度。例如,在线密码管理器通常会结合多种机制共同作用来抵御潜在威胁[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值