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

如何通过Python获取Azure Key Vault中密钥的二进制内容?

从Azure Key Vault获取密钥二进制内容的Python实现

你当前使用get_key方法返回的是包含元数据的KeyVaultKey对象,要获取密钥的二进制内容,需要从对象的key属性(JsonWebKey类型)中提取对应字段,并进行Base64URL解码。

不同密钥类型的处理方式

Azure Key Vault支持多种密钥类型(如对称密钥oct、RSA密钥RSA/RSA-HSM、椭圆曲线密钥EC/EC-HSM),不同类型的密钥存储字段不同:

1. 对称密钥(oct类型)

对称密钥的二进制内容存储在JsonWebKey.k字段中,该字段是Base64URL编码格式,解码即可得到原始二进制:

from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
import base64

credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)

# 获取密钥对象
key = key_client.get_key("key-name")

# 提取并解码对称密钥的二进制内容
if key.key.kty == "oct":
    key_binary = base64.urlsafe_b64decode(key.key.k + '=' * (-len(key.key.k) % 4))
    print("对称密钥二进制内容:", key_binary)

2. RSA密钥(RSA/RSA-HSM类型)

RSA密钥的公钥部分包含模数n和公钥指数e,私钥部分额外包含d、p、q等参数,均为Base64URL编码,解码后得到二进制:

# 提取RSA公钥二进制内容
if key.key.kty in ["RSA", "RSA-HSM"]:
    # 解码模数n
    n_binary = base64.urlsafe_b64decode(key.key.n + '=' * (-len(key.key.n) % 4))
    # 解码公钥指数e
    e_binary = base64.urlsafe_b64decode(key.key.e + '=' * (-len(key.key.e) % 4))
    print("RSA模数二进制:", n_binary)
    print("RSA公钥指数二进制:", e_binary)

    # 如果有权限获取私钥材料,可提取私钥参数
    if key.key.d is not None:
        d_binary = base64.urlsafe_b64decode(key.key.d + '=' * (-len(key.key.d) % 4))
        print("RSA私钥指数二进制:", d_binary)

3. 椭圆曲线密钥(EC/EC-HSM类型)

椭圆曲线密钥的公钥存储在x和y字段,私钥存储在d字段,同样需要Base64URL解码:

if key.key.kty in ["EC", "EC-HSM"]:
    # 解码公钥x坐标
    x_binary = base64.urlsafe_b64decode(key.key.x + '=' * (-len(key.key.x) % 4))
    # 解码公钥y坐标
    y_binary = base64.urlsafe_b64decode(key.key.y + '=' * (-len(key.key.y) % 4))
    print("EC公钥x坐标二进制:", x_binary)
    print("EC公钥y坐标二进制:", y_binary)

    # 提取私钥(如果有权限)
    if key.key.d is not None:
        d_binary = base64.urlsafe_b64decode(key.key.d + '=' * (-len(key.key.d) % 4))
        print("EC私钥二进制:", d_binary)

注意事项

  • 确保你的身份凭据(DefaultAzureCredential对应的主体)拥有Azure Key Vault的Keys/Get权限,否则无法获取密钥材料。
  • Base64URL编码可能缺少填充字符=,解码前需要补充,代码中'=' * (-len(...) % 4)用于自动补充所需的填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:51:23