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

如何使用Python解密Windows DPAPI中存储的Secure String?

解密PowerShell存储的DPAPI加密Secure String

要解密PowerShell生成并存储的Secure String,核心是调用Windows系统的DPAPI(数据保护API)——因为Read-Host -AsSecureString生成的Secure String本质是通过当前用户的DPAPI密钥加密的字节流,通常会被转成Base64字符串存储(比如配合ConvertFrom-SecureString命令)。以下是具体的Python实现方案:

前提条件

  • 安装pywin32库(用于调用Windows系统API),执行pip install pywin32即可完成安装
  • 必须在加密该Secure String的同一Windows用户账户下运行解密代码,DPAPI是用户级加密机制,跨用户无法解密

实现代码

import win32crypt
import base64

def decrypt_powershell_secure_string(encrypted_base64):
    # 将Base64编码的加密内容解码为字节流
    encrypted_data = base64.b64decode(encrypted_base64)
    # 调用DPAPI解密,第二个参数传None表示使用当前用户的DPAPI密钥
    decrypted_raw, _ = win32crypt.CryptUnprotectData(encrypted_data, None, None, None, 0)
    # PowerShell内部用UTF-16LE编码存储字符串,解码得到明文
    return decrypted_raw.decode('utf-16le')

# 示例:从存储文件读取加密字符串
with open('auth_token_secure.txt', 'r') as f:
    encrypted_content = f.read().strip()

# 解密并输出结果
plain_auth_token = decrypt_powershell_secure_string(encrypted_content)
print(f"解密后的Auth-Token: {plain_auth_token}")

关键说明

  • PowerShell的ConvertFrom-SecureString输出的是Base64格式的DPAPI加密数据,因此第一步必须解码为原始字节流
  • win32crypt.CryptUnprotectData是Windows原生解密函数,会自动匹配当前用户的DPAPI上下文,无需手动提供密钥
  • 解密后的原始字节采用UTF-16LE编码,这是PowerShell存储字符串的标准编码格式,必须对应解码才能得到正常明文

特殊场景提示

如果存储的Secure String是通过ConvertFrom-SecureString -Key指定自定义密钥加密的,上述方法不适用——此时需要用对应的自定义密钥手动实现AES-256-CBC解密,但这种情况不属于你提问的默认场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:10:25