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

如何用Python解密PHP openssl_encrypt AES-128-CTR模式加密的内容

跨语言AES-128-CTR解密实现方案

完全可以使用Python实现对应解密逻辑,无需重构原有PHP加密体系,以下是具体实现方案:

一、PHP加密逻辑梳理

你给出的PHP加密代码核心逻辑如下:

  • 加密算法为AES-128-CTR模式,IV固定长度为16字节
  • 调用openssl_encrypt时第四个参数为0,输出的密文为Base64编码格式
  • 最终加密结果格式为:Base64编码密文::十六进制编码的原始IV
  • CTR模式本身不需要额外填充,解密时无需处理填充逻辑

二、Python解密代码实现

首先安装依赖加密库:

pip install pycryptodome

解密函数代码:

from Crypto.Cipher import AES
import base64

def decrypt_php_aes128ctr(encrypted_str: str, enc_key: bytes) -> str:
    # 拆分Base64密文和十六进制编码的IV
    b64_cipher, hex_iv = encrypted_str.split("::")
    # 解码得到原始密文和IV
    ciphertext = base64.b64decode(b64_cipher)
    iv = bytes.fromhex(hex_iv)
    # 初始化CTR模式解密器,注意nonce必须设为空
    cipher = AES.new(enc_key, AES.MODE_CTR, nonce=b'', initial_value=iv)
    # 解密后转UTF-8字符串返回
    return cipher.decrypt(ciphertext).decode("utf-8")

三、常见踩坑说明

此前解密失败大概率是遇到了以下问题:

  • 密钥长度不符:AES-128要求密钥必须为16字节长度,需保证Python端传入的enc_key字节内容和PHP端的$enc_key完全一致,长度严格为16字节
  • IV参数配置错误:PyCryptodome库的CTR模式初始化时,必须将nonce设为空,IV作为initial_value参数传入,否则会出现解密结果乱码
  • 密文未解码:PHP输出的密文是Base64编码格式,必须先解码为原始字节再解密,不能直接使用字符串解密

四、加密领域学习资源推荐

  • 入门类:《图解密码技术》,零基础友好,通过大量实例讲解对称加密、非对称加密、哈希校验等核心密码学概念,适合快速建立知识体系
  • 进阶类:《应用密码学:协议、算法与C源程序》,密码学领域经典参考书籍,覆盖各类加密算法实现逻辑、安全协议设计思路,适合想要深入研究加密技术的开发者

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03