Python之代码片段-AES加解密

简介: 本文介绍基于PyCryptodome的AES-128/192/256(CBC模式)加解密实现,含依赖安装、完整Python类封装(支持UTF-8字符串加解密、PKCS7填充)、密钥/IV长度校验及Base64编码输出,并附使用示例。

依赖

pip install pycryptodome

实现

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


class AESCipher:
    """AES加解密类(字符串)"""
    def __init__(self, key, iv):
        """
        初始化
        :param key: 密钥(16/24/32字节对应的AES-128/192/256)
        """
        # 确保密钥长度是16、24或32字节
        if isinstance(key, str):
            key = key.encode('utf-8')
        if len(key) not in [16, 24, 32]:
            raise ValueError("密钥长度必须是16、24或32字节")
        self.key = key
        self.iv = iv.encode('utf-8')

    def encrypt(self, text):
        """
        加密字符串
        :param text: 要加密的字符串
        :return: base64编码的密文字符串
        """
        result = None
        try:
            # 字符串转字节
            if isinstance(text, str):
                text = text.encode('utf-8')
            # 创建CBC模式加密器(使用固定IV,实际使用建议随机生成)
            cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
            # 加密并返回base64
            encrypted = cipher.encrypt(pad(text, AES.block_size))
            result = base64.b64encode(encrypted).decode('utf-8')
        except Exception as e:
            print(f"加密失败: {str(e)}")
        return result

    def decrypt(self, text):
        """
        解密字符串
        :param text: base64编码的密文字符串
        :return: 解密后的明文字符串
        """
        result = None
        try:
            # base64解码
            encrypted = base64.b64decode(text)
            # 创建解密器
            cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
            # 解密并去除填充
            decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)
            result = decrypted.decode('utf-8')
        except Exception as e:
            print(f"解密失败: {str(e)}")
        return result


# KEY 和 IV 长度固定;内容可变
KEY = "99999999999999999999999999999999"
IV = "123456789012345x"
aes_cipher = AESCipher(KEY, IV)

示例

# 使用示例
if __name__ == "__main__":
    # 加密
    plain = "Hello World"
    encrypted_text = aes_cipher.encrypt(plain)
    print(f"原文: {plain}")
    print(f"加密: {encrypted_text}")

    # 解密
    decrypted_text = aes_cipher.decrypt(encrypted_text)
    print(f"解密: {decrypted_text}")
相关文章
|
2月前
|
人工智能
OPC中国和智能体来了是什么关系?
OPC中国是智能体来了旗下的开源人才生态平台,专注OPC一人公司与OPD一人部门的培育孵化;智能体来了则是AI智能体职业培训的能力底座。二者一体两面:前者重生态连接与场景落地,后者强专业训练与能力输出,共同构建“教—训—育—孵”闭环。
OPC中国和智能体来了是什么关系?
|
4月前
|
对象存储 Python
Python之DeepAgents自动摘要触发
DeepAgents是基于LangChain的智能体框架,核心特性之一为自动摘要功能:当上下文超长导致模型报错时,自动触发摘要压缩,再重试推理。需显式设置`max_input_tokens`参数启用,支持流式输出摘要日志。
384 3
|
2月前
|
人工智能
OPC中国是什么?一文读懂AI智能体时代的开源人才生态社区
OPC中国是智能体来了旗下开源共创社区,聚焦AI时代“一人公司(OPC)”与“一人部门(OPD)”人才培养,面向高校、政府、园区及个人,提供免费培训、孵化与创业支持,推动大学生AI实战、就业升级与自主创业。
|
2月前
|
数据采集 机器学习/深度学习 运维
从“秒封”到“日爬十万”:谈谈5个风控机制
这篇文档讨论了Python爬虫常见问题和反爬策略。作者提出五个关键点:1. 控制请求频率;2. 轮换IP;3. 伪装请求头;4. 模拟真实访问路径;5. 使用高匿名代理。这些策略需综合运用,提高爬虫生存率。
387 5
|
2月前
|
人工智能 供应链 数据可视化
长江商学院CIO徐斌:AI时代,组织的进化逻辑与人才转型新思维
徐斌,长江商学院CIO、计算机博士,20年世界500强及上市公司高管经验,首创数字化“三驾马车”方法论(流程变革、IT固化、数字运营),成功主导得力集团全链路转型,助力其获评首批浙江省未来工厂。
|
3月前
|
存储 人工智能 固态存储
阿里云4核云服务器租用价格解析:4核8G、4核16G、4核32G配置最新收费标准与活动价格
本文介绍了阿里云4核云服务器的配置选择、价格体系及购买策略。4核配置涵盖经济型e实例、通用算力型u2i/u2a、计算型c9i/c9a、通用型g9及内存型r9等多个实例族,分别适用于个人博客、企业Web应用、AI推理及大数据处理等场景。同时,文中列出了4核8G、16G、32G在各实例下的官方标准价及2026年活动价(如u2i实例4核8G低至1252.63元/年起)。建议用户根据业务需求选型,结合优惠券实现折上折,有效降低上云成本。
|
3月前
|
人工智能 监控 算法
智慧工业园区 AI 视觉安防监管系统建设方案
本方案基于AI算法盒子+专属安全算法+高清监控,构建端边云协同的智慧园区监管系统,实现24小时实时监测、智能识别、自动告警与数据追溯,覆盖安全帽/安全带佩戴、跌倒、闯入、车辆等五大行为检测,助力园区从“事后处置”迈向“事前预防、事中预警”。
428 3
|
3月前
|
人工智能 监控 测试技术
AI智能体的开发流程
AI智能体开发需结构化推进:明确定义目标与角色,设计含规划、记忆、工具、模型的四大核心架构;借助LangChain/CrewAI等框架实现;通过基准测试与人工审核保障可靠性;最终部署并持续监控优化。初学者可从Coze等低代码平台入门。(239字)
|
2月前
|
安全 NoSQL Java
《ZAKU渗透论:卓伊凡的2026渗透工程》信息收集——黑客怎么找到你?
本章详解渗透测试中至关重要的信息收集环节:占全程50%以上工作量。涵盖被动(搜索引擎、GitHub、社交媒体、Whois、历史快照)与主动(DNS查询、子域名枚举、端口扫描、目录探测)两大策略,并聚焦2026年新趋势——供应链踩点。目标是绘制精准“攻击地图”,找到阻力最小的突破口。(239字)
278 2

热门文章

最新文章