繁体   English   中英

C#Bouncy Castle解码私钥

[英]C# Bouncy Castle decoding private key

我在使用输入到C#类中的私钥密码对私钥进行解码时遇到错误。 我认为问题是因为关键是:

  1. 从具有换行符的文本文件中读取内容。
  2. 私钥不是使用此库创建的,因此也许我无法正确解码。
  3. 我不知道是什么填充系统来生成此密钥的(特别是它是从Ruby Security库生成的)。

抛出的异常是

Org.BouncyCastle.Crypto.InvalidCipherTextException

带消息

垫块损坏

发生在线object privateKeyObject = pemReader.ReadObject();

这是提供给我的示例私钥:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C7E12029C6ED8D89

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
-----END RSA PRIVATE KEY-----

这是私钥密码:

SPH?!(C7ryh~juR>

这是代码:

private readonly string _pubKey;
private readonly string _privateKey;
private readonly string _privateKeyPass;

public RSAKeyEncryption(string pubKey, string privateKey, string privateKeyPass)
{
    _pubKey = pubKey;
    _privateKey = privateKey;
    _privateKeyPass = privateKeyPass;
}

private AsymmetricCipherKeyPair DecodePrivateKey()
{
    TextReader textReader = new StringReader(_privateKey);
    PemReader pemReader = new PemReader(textReader, new PasswordFinder(_privateKeyPass));
    object privateKeyObject = pemReader.ReadObject();
    AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)privateKeyObject;
    return keyPair;
}

以下代码为我工作:

//  https://stackoverflow.com/a/6038944/1911064
StreamReader sr = new StreamReader(@"E:\AK\temp\key.pem");
string privateKeyPass = "SPH?!(C7ryh~juR>";
var pf = new PasswordFinder(privateKeyPass);
PemReader pr = new PemReader(sr, pf);
AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
RSAParameters rsa =
        DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM