I持つC#のための弾む城を使用して暗号化された秘密鍵の作成、次の方法:復号化パスフレーズ保護PEM秘密鍵
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-----
私はドン何を私の解読メソッドで秘密鍵を暗号化するために使用されたパスワードを消費する方法がわかっています。今、彼にpassword
を使って自分の秘密鍵を「解読」する方法を知らなくても、私は次の例外を取得:
Org.BouncyCastle.OpenSsl.PemException:問題ENCRYPTED 秘密鍵の作成:System.NullReferenceException:オブジェクト参照をオブジェクトのインスタンスに を設定しないでください。 でここOrg.BouncyCastle.OpenSsl.PemReader.ReadPrivateKey(PemObject pemObject)
は、復号化メソッドのコードは次のとおりです。
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;
}
いくつかのタグを追加してタイトルを変更しました(ランタイムの特性を質問本体に移しています)。私はBCの実装をオンラインで見つけることができませんでしたので、これはいくつかの注意を喚起することを願っています: –