python ecb是什么?python ecb加密解密实例

在 Python 中处理 ECB(Electronic Codebook,电子密码本模式) 通常涉及对称加密算法(如 AES),但需要特别强调的是:

⚠️ ECB 模式是不安全的,因为它对相同的明文块生成相同的密文块,无法隐藏数据模式,仅用于学习或测试,切勿用于生产环境,推荐使用 CBC、CTR、GCM 等更安全的模式。

python纯实现aes加密的ECB和CBC模式,带你使用python手写aes,提供python代码!!!
加载中
python纯实现aes加密的ECB和CBC模式,带你使用python手写aes,提供python代码!!!

使用 pycryptodome 库实现 AES-ECB

安装依赖

pip install pycryptodome

加密示例

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
def aes_ecb_encrypt(plaintext: str, key: bytes) -> bytes:
    """
    使用 AES-ECB 模式加密
    :param plaintext: 明文字符串
    :param key: 16/24/32 字节的密钥
    :return: Base64 编码的密文
    """
    if len(key) not in (16, 24, 32):
        raise ValueError("密钥长度必须为 16、24 或 32 字节")
    cipher = AES.new(key, AES.MODE_ECB)
    padded_data = pad(plaintext.encode('utf-8'), AES.block_size)
    ciphertext = cipher.encrypt(padded_data)
    return base64.b64encode(ciphertext)
def aes_ecb_decrypt(ciphertext_b64: str, key: byt

python ecb是什么?python ecb加密解密实例

es) -> str: """ 使用 AES-ECB 模式解密 :param ciphertext_b64: Base64 编码的密文 :param key: 16/24/32 字节的密钥 :return: 解密后的明文 """ if len(key) not in (16, 24, 32): raise ValueError("密钥长度必须为 16、24 或 32 字节") ciphertext = base64.b64decode(ciphertext_b64) cipher = AES.new(key, AES.MODE_ECB) padded_plaintext = cipher.decrypt(ciphertext) plaintext = unpad(padded_plaintext, AES.block_size) return plaintext.decode('utf-8') # 示例使用 if __name__ == "__main__": key = b'0123456789abcdef' # 16 字节密钥(AES-128) message = "Hello, ECB Mode!" encrypted = aes_ecb_encrypt(message, key) print(f"加密结果 (Base64): {encrypted.decode('utf-8')}") decrypted = aes_ecb_decrypt(encrypted.decode('utf-8'), key) print(f"解密结果: {decrypted}")

使用 cryptography 库(不直接支持 ECB,需手动实现)

注意:cryptography 库出于安全考虑,默认不提供 ECB 模式,如需使用,需借助底层 Cipher 并指定 mode=ECB(部分版本支持)。

from cryptog

python ecb是什么?python ecb加密解密实例

raphy.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend from Crypto.Util.Padding import pad, unpad # 仍需 pycryptodome 用于填充 import base64 def aes_ecb_encrypt_cryptography(plaintext: str, key: bytes) -> bytes: if len(key) not in (16, 24, 32): raise ValueError("密钥长度必须为 16、24 或 32 字节") padded_data = pad(plaintext.encode('utf-8'), 16) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) encryptor = cipher.encryptor() ciphertext = encryptor.update(padded_data) + encryptor.finalize() return base64.b64encode(ciphertext) def aes_ecb_decrypt_cryptography(ciphertext_b64: str, key: bytes) -> str: if len(key) not in (16, 24, 32): raise ValueError("密钥长度必须为 16、24 或 32 字节") ciphertext = base64.b64decode(ciphertext_b64) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) decryptor = cipher.decryptor() padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize() plaintext = unpad(padded_plaintext, 16) return plaintext.decode('utf-8')

重要提醒

项目 说明
安全性

python ecb是什么?python ecb加密解密实例

ECB 不推荐用于任何实际应用场景

替代方案 使用 AES.MODE_CBCAES.MODE_CTRAES.MODE_GCM
密钥管理 密钥应安全存储,避免硬编码
填充方式 使用 Crypto.Util.Padding 进行 PKCS7 填充

更安全的替代示例(AES-GCM)

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
def aes_gcm_encrypt(plaintext: str, key: bytes) -> tuple:
    """返回 (nonce, ciphertext, tag)"""
    cipher = AES.new(key, AES.MODE_GCM)
    ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode('utf-8'))
    return cipher.nonce, ciphertext, tag
def aes_gcm_decrypt(nonce: bytes, ciphertext: bytes, tag: bytes, key: bytes) -> str:
    cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
    plaintext = cipher.decrypt_and_verify(ciphertext, tag)
    return plaintext.decode('utf-8')
# 使用示例
key = get_random_bytes(32)  # 256 位密钥
nonce, ct, tag = aes_gcm_encrypt("Secure message", key)
decrypted = aes_gcm_decrypt(nonce, ct, tag, key)
print(f"解密: {decrypted}")

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/480978.html

(0)
Python美元怎么换算?Python汇率转换代码
上一篇 2026年7月10日 16:45
Python HttpRunner如何快速上手?接口自动化测试框架实战
下一篇 2026年7月10日 16:48

相关推荐

  • 高校网站后台管理系统

    2026年高校网站后台管理系统的核心价值在于:以AI驱动的低代码架构与等保2.0合规基座,彻底解决高校多站点运维难、信息孤岛与安防薄弱痛点,实现数智化转型降本增效,2026高校网站群运维痛点与底层重构传统管理模式的崩塌临界点根据中国教育和科研计算机网(CERNET)2026年初发布的《高校网络生态治理报告》,全……

    2026年5月5日
    6500
  • 高通生物人脸识别技术安全吗?人脸识别解锁哪个芯片好

    高通生物人脸识别技术凭借NPU异构算力与毫米级3D深度感知,已确立2026年移动端及边缘侧生物识别的绝对领先地位,实现金融级防伪与毫秒级无感解锁的完美统一,高通人脸识别技术底层架构与核心壁垒异构算力驱动:从算法到硅片的深度协同2026年,生物识别已彻底告别单纯依赖云端算力的时代,高通技术的核心在于其Hexago……

    2026年4月24日
    4900
  • 服务器接收请求数据失败怎么解决,服务器接收数据失败的原因和解决方法

    服务器接收请求数据失败,通常源于网络链路中断、服务器资源耗尽、配置错误或应用程序逻辑缺陷四大核心层面,解决问题的关键在于建立“由外而内、由底向上”的排查逻辑,即先排查网络连通性,再确认服务器负载与端口状态,最后深入分析应用日志与代码逻辑,通过系统化的诊断流程,绝大多数数据接收故障都能在短时间内定位并修复, 网络……

    2026年3月4日
    12800
  • 服务器怎么没服务器,为什么服务器突然连接不上

    服务器显示“无服务器”或无法连接的状态,本质上并非物理设备的消失,而是网络通信链路中断、系统资源耗尽或配置错误导致的逻辑“失联”,核心结论在于:服务器依然存在,但客户端与服务器之间的连接通道被阻断,或者服务器操作系统层面的响应能力丧失, 解决这一问题的关键路径,在于从网络层、系统层、应用层三个维度进行逐级排查与……

    2026年3月16日
    13200
  • 服务软件开发要注意什么,定制一个软件需要多少钱?

    服务软件开发的核心在于精准匹配业务场景需求,通过模块化架构实现高可用与易扩展,最终提升服务交付效率与客户满意度,什么是服务软件开发及其核心价值咱们平时说的服务软件开发,其实不是单纯写几行代码,而是把线下的服务流程搬到线上,用系统去管人、管事、管物,比如以前家电坏了,客户得打电话报修,客服手写派单,师傅拿个本子记……

    2026年7月29日
    700
  • 服务器忘记宝塔密码怎么办?宝塔面板密码找回方法

    面对服务器忘记宝塔密码的紧急情况,最直接、最高效的解决方案是通过SSH终端登录服务器,使用宝塔官方提供的强制修改命令行工具重置密码,这一方法无需繁琐的数据库操作,也不需要重启服务器或宝塔服务,能够在1分钟内恢复面板的控制权,是解决此类问题的核心手段,对于Linux和Windows不同操作系统,虽然操作界面不同……

    2026年3月24日
    11900
  • 火影忍者OL哪些服务器满了,推荐哪个服务器?

    火影忍者OL的满服务器状态会随版本更新和玩家流动动态变化,目前老区如“木叶之光”、“晓之降临”等长期处于爆满状态,新服通常在开放后数周内也会达到满员,如何判断火影忍者OL服务器是否满员要查询当前哪些服务器满员,最直接的方法是在游戏登录界面观察服务器状态指示灯,每个服务器名称左侧会显示颜色标记:绿色表示流畅,黄色……

    2026年7月30日
    900
  • 服务器怎么弄网站?新手搭建网站详细步骤教程

    搭建网站的核心在于将服务器环境配置、网站程序部署与域名解析三者进行有机整合,对于大多数企业站和个人博客而言,选择Linux系统配合宝塔面板是目前效率最高、门槛最低的技术方案,能够实现可视化的服务器管理,从而快速解决服务器怎么弄网站这一技术难题, 服务器环境搭建:构建网站的稳固地基服务器是网站运行的物理载体,环境……

    2026年3月17日
    9900
  • 服务器架构代码

    构建数字基石的工程艺术服务器架构代码是驱动现代应用高效、稳定、安全运行的核心逻辑,它远不止是编写功能,而是通过精心设计的代码结构、通信机制、资源管理策略和安全防护体系,将物理或虚拟的计算资源转化为可弹性伸缩、容错自愈的服务能力,其核心在于将高可用性、可扩展性、性能、安全性等非功能性需求(NFRs)转化为可执行……

    2026年2月14日
    14730
  • 济南SaaS团队租服务器,配置怎么选更贴合业务,哪家好?

    对于济南SaaS团队,租服务器选配置的核心是匹配业务场景,避免过度配置或资源不足,建议优先选择弹性云服务器并根据实际负载调整,济南SaaS团队服务器配置推荐指南业务场景决定配置方向SaaS业务天然需要稳定在线、高并发访问和快速数据处理,如果是面向中小企业的轻量级SaaS,比如CRM或办公协作工具,初期可以选择4……

    2026年8月11日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注