【发布时间】:2023-11-10 18:09:02
【问题描述】:
我有以下使用 C# 的 Bouncy Castle 创建加密私钥的方法:
public string GetPrivateKey(AsymmetricCipherKeyPair keyPair, string password)
{
var generator = new Pkcs8Generator(keyPair.Private, Pkcs8Generator.PbeSha1_3DES);
generator.IterationCount = 4;
generator.Password = password.ToCharArray();
var pem = generator.Generate();
TextWriter textWriter = new StringWriter();
PemWriter pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(pem);
pemWriter.Writer.Flush();
string privateKey = textWriter.ToString();
return privateKey;
}
看起来像这样:
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
我不知道如何在我的 Decrypt 方法中使用用于加密私钥的密码。现在,在不知道如何使用password“解密”我的私钥的情况下,我得到以下异常:
Org.BouncyCastle.OpenSsl.PemException:创建加密的问题 私钥:System.NullReferenceException:未设置对象引用 到一个对象的实例。在 Org.BouncyCastle.OpenSsl.PemReader.ReadPrivateKey(PemObject pemObject)
下面是 Decrypt 方法的代码:
public string Decrypt(string base64Input, string privateKey, string password)
{
var bytesToDecrypt = Convert.FromBase64String(base64Input);
//get a stream from the string
AsymmetricCipherKeyPair keyPair;
var decryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(privateKey))
{
var obj = new PemReader(txtreader).ReadObject();
keyPair = (AsymmetricCipherKeyPair) obj;
decryptEngine.Init(false, keyPair.Private);
}
var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));
return decrypted;
}
【问题讨论】:
标签: c# encryption bouncycastle private-key pem