【问题标题】:Read ECC private key PEM into AsymmetricCipherKeyPair c# bouncy castle将ECC私钥PEM读入AsymmetricCipherKeyPair c# bouncy castle
【发布时间】:2020-12-18 10:13:01
【问题描述】:

我使用 Bouncy Castle 生成 PEM 格式的 ECC 密钥对:

var curve = ECNamedCurveTable.GetByName("secp256k1");
var domainParams = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());

var secureRandom = new SecureRandom();
var keyParams = new ECKeyGenerationParameters(domainParams, secureRandom);

var generator = new ECKeyPairGenerator("ECDSA");
generator.Init(keyParams);
AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair();
TextWriter textWriter = new StringWriter();
PemWriter pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(keyPair.Private);
pemWriter.Writer.Flush();
string pem_privatekey = textWriter.ToString();

我当前的 ECC 私钥是:

-----BEGIN EC PRIVATE KEY-----MIIBUQIBAQQgyDHBaj30dcIsS4otdOXR8ue+rZDwHcGEjxwle3H24W6ggeMwgeACAQEwLAYHKoZIzj0BAQIhAP////////////////////////////////////7///wvMEQEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwRBBHm+Zn753LusVaBilc6HCwcCm/zbLc4o2VnygVsW+BeYSDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj/sQ1LgCIQD////////////////////+uq7c5q9IoDu/0l6M0DZBQQIBAaFEA0IABHxw0PK0uEvnF1lwhkLmHUlVtQVUrLp/1EcKzfAm6xOL/I6LtQ9nXPxDNhaxf/rPtk3DkZ5CaO0hLr1trCRrJz8=-----END EC PRIVATE KEY-----

我想在充气城堡ECPrivateKeyParametersAsymmetricCipherKeyPair 格式中私人阅读此 pem 格式。 我正在尝试以下代码。 pem 就是上面的私钥字符串。

PemReader pr = new PemReader(new StringReader(pem));
ECPrivateKeyParameters KeyPair = (ECPrivateKeyParameters)pr.ReadObject();

为什么返回 null?请纠正我。

【问题讨论】:

    标签: c# cryptography bouncycastle private-key ecdsa


    【解决方案1】:

    pr.ReadObject() 在此处返回 AsymmetricCipherKeyPair 实例。这具有PrivatePublic 属性,这里分别返回ECPrivateKeyParametersECPublicKeyParameters 实例,即代码应该是:

    PemReader pr = new PemReader(new StringReader(pem));
    AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
    ECPrivateKeyParameters privateKeyParams = (ECPrivateKeyParameters)keyPair.Private;
    ECPublicKeyParameters publicKeyParams = (ECPublicKeyParameters)keyPair.Public; // for completeness
    

    【讨论】:

    • 使用此代码,我得到keyPairnull。我在传递pem 字符串格式时做错了什么吗?
    • 如果我将 pem 字符串与空格一起发送(因为它是 pem_privatekey ),那么这是可行的。但是,如果我删除所有空格和回车,那么它就不起作用了!
    • @Varsh - 通常,换行紧接页眉和紧接页脚足以加载键。
    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多