将ECC私钥PEM读入不对称密码密钥对c#bouncy castle

将ECC私钥PEM读入不对称密码密钥对c#bouncy castle,c#,cryptography,bouncycastle,private-key,ecdsa,C#,Cryptography,Bouncycastle,Private Key,Ecdsa,我使用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 keyPara

我使用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-----
我想在弹跳城堡
ECPrivateKeyParameters
AsymmetricipherKeypair
格式中阅读此pem私有格式。 我正在尝试以下代码。
pem
是上述私钥字符串

PemReader pr = new PemReader(new StringReader(pem));
ECPrivateKeyParameters KeyPair = (ECPrivateKeyParameters)pr.ReadObject();
为什么返回空值?请更正。

pr.ReadObject()
在此返回一个
非对称密码密钥对
实例。它具有属性
Private
Public
,在这里分别返回
ECPrivateKeyParameters
ECPublicKeyParameters
实例,即代码应为:

PemReader pr = new PemReader(new StringReader(pem));
AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
ECPrivateKeyParameters privateKeyParams = (ECPrivateKeyParameters)keyPair.Private;
ECPublicKeyParameters publicKeyParams = (ECPublicKeyParameters)keyPair.Public; // for completeness
pr.ReadObject()
在此处返回一个
asymmetricipherkeypair
实例。它具有属性
Private
Public
,在这里分别返回
ECPrivateKeyParameters
ECPublicKeyParameters
实例,即代码应为:

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

使用此代码,我得到
密钥对
null
。传递
pem
字符串格式时是否有错误?如果我将
pem
字符串与空格一起发送(因为它是
pem_privatekey
),则此操作有效。但是,如果我删除所有空格和回车符,那么它就不起作用了@Varsh-通常,页眉后和页脚前的换行符足以加载密钥。使用此代码,我将获得
keyPair
作为
null
。传递
pem
字符串格式时是否有错误?如果我将
pem
字符串与空格一起发送(因为它是
pem_privatekey
),则此操作有效。但是,如果我删除所有空格和回车符,那么它就不起作用了@Varsh-通常,页眉之后和页脚之前的换行符足以让键加载。