【发布时间】:2020-11-20 16:42:43
【问题描述】:
我使用以下命令来生成私有和公共 ES256 密钥:
创建私钥:openssl ecparam -genkey -name prime256v1 -noout -out private.pem
创建公钥:openssl ec -in private.pem -pubout -out public.pem
现在我得到了以下私钥:
-----开始EC私钥----- MHcCAQEEIFkxqdXoVAGSSc55u0muepwVRr3ARWzLMO0ywW7qhEeIoAoGCCqGSM49 AwEHoUQDQgAEFXuuZeDJN9dvjCwKy40/coi3NVto97qELhiRSObbhX3mUSvxpPeK fVv3/fVCjt9CeGuwYvkQPHmRfx0EFjAI8A== -----结束EC私钥-----
以下公钥:
-----开始公钥----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFXuuZeDJN9dvjCwKy40/coi3NVto 97qELhiRSObbhX3mUSvxpPeKfVv3/fVCjt9CeGuwYvkQPHmRfx0EFjAI8A== -----结束公钥-----
我想将这些键加载到 c# 中的 ecdsa 实例中。我用以下代码做到这一点:
public ECDsaSecurityKey LoadPrivateKey()
{
byte[] privateKey = Convert.FromBase64String(PRIVATE_KEY);
try
{
ECDsa? privateKeyEcDsa = ECDsa.Create();
if (privateKeyEcDsa == null)
{
throw new CryptographicException(message: "Key not created");
}
privateKeyEcDsa.ImportPkcs8PrivateKey(source: privateKey, bytesRead: out _);
return new ECDsaSecurityKey(privateKeyEcDsa);
}
catch (CryptographicException exception)
{
throw;
}
}
还有公钥:
public ECDsaSecurityKey LoadPublicKey()
{
byte[] publicKey = Convert.FromBase64String(PUBLIC_KEY);
try
{
ECDsa? publicKeyEcDsa = ECDsa.Create();
if (publicKeyEcDsa == null)
{
throw new CryptographicException(message: "Key not created");
}
publicKeyEcDsa.ImportSubjectPublicKeyInfo(source: publicKey, bytesRead: out _);
return new ECDsaSecurityKey(publicKeyEcDsa);
}
catch (CryptographicException exception)
{
this._logger.LogError("Something went wrong while loading EcDsa public key: " + exception.Message);
throw;
}
}
我不确定为什么这不起作用? openssl 命令生成的密钥对类型是否正确?
编辑: 在这个网站上,当我选择 ES256 私钥是不同的: https://kjur.github.io/jsjws/tool_jwt.html
例子:
-----开始私钥----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgEbVzfPnZPxfAyxqE ZV05laAoJAl+/6Xt2O4mOB611sOhRANCAASgFTKjwJAAU95g++/vzKWHkzAVmNMI tB5vTjZOOIwnEb70MsWZFIyUFD1P9Gwstz4+akHX7vI8BH6hHmBmfeQl -----结束私钥-----
我用 OpenSSL 生成的私钥最后加上两个等号:
-----开始EC私钥----- MHcCAQEEIFkxqdXoVAGSSc55u0muepwVRr3ARWzLMO0ywW7qhEeIoAoGCCqGSM49 AwEHoUQDQgAEFXuuZeDJN9dvjCwKy40/coi3NVto97qELhiRSObbhX3mUSvxpPeK fVv3/fVCjt9CeGuwYvkQPHmRfx0EFjAI8A== -----结束EC私钥-----
所以我想我在打开 ssl 时做错了。
【问题讨论】:
标签: c# cryptography ecdsa