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_CBC、AES.MODE_CTR 或 AES.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

相关推荐

  • 从ONS服务器能获取哪些信息,怎么查询?

    从ons服务器得到哪些信息?答案是“位置”和“许可”,而不是商品详情本身, ONS服务器在物联网中扮演“目录服务”的角色,你向它提交一个EPC电子标签编码,它不会直接告诉你这个商品叫什么、产地在哪,而是告诉你“这个编码对应的服务地址在哪里”,所有细致的产品数据,都存在那个地址指向的EPCIS服务器上,理解了这个……

    2026年9月23日
    100
  • 服务器并发怎么计算?服务器并发数计算方法详解

    服务器并发计算能力直接决定了系统在高负载场景下的稳定性与响应速度,是架构设计中至关重要的核心指标,核心结论在于:服务器并发计算并非单纯追求硬件性能的堆砌,而是通过精确的量化模型、合理的进程线程调度以及高效的I/O模型,实现计算资源与请求处理的动态平衡, 掌握并发计算文档中的关键参数与计算逻辑,能够帮助技术团队精……

    2026年4月6日
    8300
  • 线下存储服务器有哪些品牌?,哪个性价比高

    线下存储服务器从形态上主要分为塔式服务器、机架式服务器、高密度存储服务器和GPU存储服务器,搭配企业自建机房或IDC托管部署,服务商如简米科技和酷番云可提供持牌机房与硬件租用方案,线下存储服务器的硬件形态到底有哪几类线下存储服务器并不是单一产品,而是根据物理尺寸、存储密度和计算能力划分的多种硬件形态,采购前先看……

    2026年9月19日
    100
  • web服务器安全措施有哪些?,有哪些方法

    Web服务器安全的核心答案:构建“系统加固-应用防护-网络拦截-运维审计”四层纵深防御体系,并在部署层面选择持牌合规的IDC服务商,才能有效应对当前主流的自动化攻击与数据泄露风险,根据《中国互联网网络安全报告》近年发布的统计数据,针对Web端口的攻击行为占网络攻击总量的较大比例,弱口令、未修复漏洞与配置错误是三……

    2026年8月22日
    800
  • AI服务器电源小公司有哪些,哪个品牌好?

    在AI服务器电源领域,除了台达、光宝等国际巨头,一批中小型公司如广州金升阳、深圳核达中远通、北京迪赛奇正等,正凭借在模块电源和系统集成领域的积累,逐步成为AI服务器电源供应链的重要补充,这些公司体量不大,但在特定技术和细分市场拥有独特优势,为AI服务器提供了多样化的电源选择,AI服务器电源市场现状与小型供应商的……

    2026年7月29日
    700
  • 规则引擎如何解析数据包?

    规则引擎解析数据包的核心在于将非结构化的网络流量转化为可执行的安全策略,通过预定义的逻辑匹配与动作响应,实现毫秒级的威胁拦截与合规审计,在数字化转型的深水区,网络安全不再是简单的边界防御,而是深入数据流内部的精细化治理,想象一下,你的企业网络就像一座繁忙的港口,数据包是穿梭其中的集装箱,传统的防火墙像是一个粗放……

    2026年7月5日
    6100
  • 服务器操作系统与桌面操作系统有哪些区别,怎么选?

    服务器操作系统与桌面操作系统虽然同属系统软件,但在设计理念、功能侧重和运行机制上存在本质差异,核心结论在于:服务器操作系统以稳定性、安全性、并发处理能力和长时间无故障运行为首要目标,而桌面操作系统则侧重于用户体验、图形界面交互及多媒体功能的易用性, 理解这些差异对于构建高效的IT基础设施至关重要,这也是技术人员……

    2026年2月27日
    14600
  • LOL哪些服务器归拳头管,分别都是什么区

    拳头游戏直接管辖的服务器包括北美、欧洲西部、欧洲东部、韩国、巴西、拉丁美洲、土耳其、俄罗斯、大洋洲、日本、东南亚以及PBE测试服,中国服务器由腾讯代理运营,拳头全球服务器布局概览《英雄联盟》的服务器架构由拳头游戏统一规划,但运营权分为直营和代理两种模式,拳头直接管辖的服务器覆盖了全球主要地区,这些地区的玩家账号……

    2026年8月25日
    1200
  • 在部署服务器时如何计算最大带宽需求以确保高性能?, 服务器最大带宽如何选择?

    业务流畅度的核心命脉服务器最大带宽,是服务器与外部网络交换数据的极限速率,它直接决定了您的网站、应用或服务能承载多少用户、多快响应请求以及处理多大流量,选择与优化服务器带宽,是保障业务稳定运行、提升用户体验的关键基石,带宽的本质:数据高速公路的宽度想象带宽如同连接服务器与互联网的“高速公路车道数”,车道越宽(带……

    2026年2月16日
    17630
  • python stdscr怎么用?python curses模块常用函数详解

    Python stdscr 是 ncurses 库中用于创建和管理终端用户界面(TUI)的核心对象,它允许开发者在命令行环境中实现类似图形界面的交互体验,如实时数据监控、菜单导航和复杂输入处理,在传统的 Python 开发中,print 语句和 input 函数足以应对简单的脚本需求,当业务场景涉及到需要高频刷……

    2026年7月5日
    6000

发表回复

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