c# - 将 key 导入到 Azure Key Vault (C#)

标签 c# azure azure-keyvault elliptic-curve

我在使用 SDK 时将 EC key 导入到 Azure Key Vault 时遇到问题。

代码:

var ecKey = Nethereum.Signer.EthECKey.GenerateKey();
var privateKey = ecKey.GetPrivateKeyAsBytes().ToHex();

var privateKeyBytes = Encoding.UTF8.GetBytes(privateKey);
var privateKeyInt =
        new Org.BouncyCastle.Math.BigInteger(+1, privateKeyBytes);
var parameters = SecNamedCurves.GetByName("secp256k1");
var ecPoint = parameters.G.Multiply(privateKeyInt).Normalize();
var privateKeyX = ecPoint.Normalize().XCoord.ToBigInteger()
        .ToByteArrayUnsigned();
var privateKeyY = ecPoint.Normalize().YCoord.ToBigInteger()
        .ToByteArrayUnsigned();

var jwk = new JsonWebKey(new [] { KeyOperation.Sign, KeyOperation.Verify, });
jwk.CurveName = KeyCurveName.P256K;
jwk.KeyType = KeyType.Ec;
jwk.D = privateKeyBytes;

jwk.X = privateKeyX;
jwk.Y = privateKeyY;

await keyClient.ImportKeyAsync(keyName, jwk, cancellationToken);`

来自 Azure 的错误,这对于准确了解问题所在没有太大帮助:

Azure.RequestFailedException: EC key is not valid - cannot instantiate crypto service. Status: 400 (Bad Request) ErrorCode: BadParameter

注意:在此示例中,我生成了一个新 key ,但通常它是我们现有的私钥。

你们知道这里出了什么问题吗?

最佳答案

已通过 Topaco's answer 解决.

我做错的是我对私钥进行编码,然后转换为字节数组。

正确代码:

var ecKey = Nethereum.Signer.EthECKey.GenerateKey();
var privateKey = ecKey.GetPrivateKeyAsBytes();
var parameters = SecNamedCurves.GetByName("secp256k1");
var privateKeyInt =
    new Org.BouncyCastle.Math.BigInteger(+1, privateKey);
var ecPoint = parameters.G.Multiply(privateKeyInt).Normalize();
var privateKeyX = ecPoint.Normalize().XCoord.ToBigInteger()
    .ToByteArrayUnsigned();
var privateKeyY = ecPoint.Normalize().YCoord.ToBigInteger()
    .ToByteArrayUnsigned();

var jwk = new JsonWebKey(new [] { KeyOperation.Sign, KeyOperation.Verify, })
{
    CurveName = KeyCurveName.P256K,
    KeyType = KeyType.Ec,
    D = privateKey,
    X = privateKeyX,
    Y = privateKeyY,
};

await keyClient.ImportKeyAsync(keyName, jwk, cancellationToken);

关于c# - 将 key 导入到 Azure Key Vault (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75854557/

相关文章:

c# - 将xml中的 "skipped"个节点保存到数组中

c# - 关于列表选择器过滤的指南

c# - 在一次往返中执行多个 SQL 命令

asp.net - 尝试访问 Azure Web 应用程序中的特定页面时发生错误

azure - 使用 WAFV2 Azure 应用程序网关使用多个基本监听器时无法更新 SSL 证书

黑客入侵时的 Azure Key Vault 安全性

c# - 正则表达式匹配字符串中的逗号

Azure Functions 代理 - 如果值包含 JSON,则无法设置 HTTP header

c# - 如何仅使用 Microsoft 个人帐户在 Microsoft Graph 中进行身份验证?

python - 如何从 Azure Key Vault 中的证书获取私钥?