You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用ECB模式192位密钥的3DES算法加密消息

3DES ECB 192位密钥Python加密实现方案

依赖安装

首先安装加密依赖库:

pip install pycryptodome

报错原因

你遇到的ValueError("Not a valid TDES key")错误核心原因是传入的密钥长度不符合3DES算法规范:3DES算法仅支持16字节(128位)或24字节(192位)长度的密钥,你原代码中传入的密钥长度远大于24字节,因此触发报错。
除此之外原代码还存在以下问题:

  • 未导入base64模块,也未实现PKCS5填充逻辑,运行时会抛出其他异常
  • 加密前的编码逻辑顺序错误,应该先把明文转字节再做填充,原代码先填充再编码会导致填充长度计算错误
  • 变量名笔误:3DES实例被错误命名为aes

正确可运行实现

以下实现和参考的Java版加密逻辑完全对齐,加密结果可以和Java实现互通:

from Crypto.Cipher import DES3
import base64

# PKCS5填充实现,3DES块大小固定为8字节
def pkcs5_pad(data: bytes, block_size: int = 8) -> bytes:
    padding_len = block_size - len(data) % block_size
    return data + bytes([padding_len]) * padding_len

def encrypt_3des_ecb(plaintext: str, secret_key: str) -> str:
    # 取密钥前24字节作为192位有效密钥,和Java DESedeKeySpec逻辑对齐
    key_bytes = secret_key.encode("utf-8")[:24]
    # 初始化3DES ECB模式加密实例
    cipher = DES3.new(key_bytes, DES3.MODE_ECB)
    # 明文转字节后做填充
    padded_plaintext = pkcs5_pad(plaintext.encode("utf-8"))
    # 加密后转base64,去除换行符和回车符和Java逻辑对齐
    encrypted_bytes = cipher.encrypt(padded_plaintext)
    return base64.b64encode(encrypted_bytes).decode("utf-8").replace("\r", "").replace("\n", "")

# 使用示例
if __name__ == "__main__":
    # 替换为你的实际密钥和待加密明文
    your_key = "M4H5DE7mHXMS219b8adm9H4WFTElLfa26e7s3U7dBgT2hegt5fMq5aRfEv3345uiZh2zGxRPaBT663669mb01MCU9OHz2glYb2aOco5vJfoN9LKjxjOIZE64Jd4t9FUQ1F043TvRp4CwBX7Ug8Dp9fV25Zs4m7Z5DIL7H7D617jVcXLHT5Z83atR1sQcJpEG"
    test_plaintext = "测试待加密内容"
    print(encrypt_3des_ecb(test_plaintext, your_key))

注意事项

  • ECB模式安全性较低,生产环境如果允许建议更换为CBC等更安全的加密模式
  • 密钥请做好保密存储,不要硬编码到业务代码中

内容的提问来源于stack exchange,提问作者xyyHIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:54:02