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

如何编写Python代码解密Java端AES/GCM/NoPadding加密的文本

AES-GCM Java加解密等效Python解密代码

前置依赖

首先安装加解密依赖库:
pip install pycryptodome

核心逻辑对齐说明

和Java代码完全对齐的处理逻辑:

  • 原始密钥先做MD5哈希,哈希结果转小写十六进制字符串,取该字符串的UTF-8编码字节作为AES-256密钥
  • 使用固定IV值:0123456789ABCDEF的UTF-8编码字节(Java代码重复定义了IV,以后面的16位版本为准)
  • GCM认证标签长度为128位
  • 待解密内容为Base64编码格式,解密后结果为UTF-8编码的明文

完整代码

import base64
import hashlib
from Crypto.Cipher import AES

# 配置和Java代码完全对齐
# 若实际使用Java中第一个32位IV,替换为b"0123456789ABCDEF0123456789ABCDEF"即可
FIXED_IV = b"0123456789ABCDEF"
DEFAULT_KEY = "super secret"
TAG_LENGTH = 16  # 对应Java的128位认证标签长度

def aes_gcm_decrypt(encrypted_b64: str, secret_key: str = DEFAULT_KEY) -> str:
    # 1. 处理密钥:和Java逻辑一致,MD5哈希后转小写十六进制,再取字节作为AES密钥
    md5 = hashlib.md5()
    md5.update(secret_key.encode("utf-8"))
    key_hex = md5.hexdigest().lower()
    aes_key = key_hex.encode("utf-8")
    
    # 2. 解码Base64加密内容
    encrypted_data = base64.b64decode(encrypted_b64)
    
    # 3. 初始化GCM解密器
    cipher = AES.new(aes_key, AES.MODE_GCM, nonce=FIXED_IV, mac_len=TAG_LENGTH)
    
    # 4. 解密并校验认证标签
    try:
        # Java加密输出结构为「密文+16位标签」,拆分后传入解密校验
        plain_bytes = cipher.decrypt_and_verify(encrypted_data[:-TAG_LENGTH], encrypted_data[-TAG_LENGTH:])
        return plain_bytes.decode("utf-8")
    except ValueError:
        raise Exception("解密失败,可能是密钥错误、内容被篡改或IV不匹配")

# 示例使用
if __name__ == "__main__":
    # 替换为Java加密生成的Base64字符串即可
    encrypted_text = "替换为待解密的Base64内容"
    try:
        result = aes_gcm_decrypt(encrypted_text)
        print("解密结果:", result)
    except Exception as e:
        print("错误:", str(e))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:45:03