0

次のコードを使用して、パスワードで保護されたPKCS8 DERキーを復号化できます。

MemoryStream ms = new MemoryStream(privateKey);
AsymmetricKeyParameter keyparams =       Org.BouncyCastle.Security.PrivateKeyFactory.DecryptKey(password.ToCharArray(), ms);
RSAParameters rsaparams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyparams);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaparams);
return rsa;           

ここで、同じタイプのキーが別の形式で提供された場合は、そのキーを再作成する必要があります (この例では、PFX ファイルとして提供されています)。そのため、パスワードで保護された PKCS8 DER キーを PFX 秘密キーから作成する必要があります。Bouncy Castle のソース コードを読んだ後、PrivateKeyFactory.EncryptKey関数を見つけることができましたが、動作させることができません。私が持っているコードは次のとおりです。

X509Certificate2 cert = new X509Certificate2(pfx_bytes, password,X509KeyStorageFlags.Exportable);             
var pkey = cert.PrivateKey;
var bcCert = DotNetUtilities.FromX509Certificate(cert);    
var bcPkey = DotNetUtilities.GetKeyPair(pkey).Private;
return PrivateKeyFactory.EncryptKey(Org.BouncyCastle.Asn1.DerObjectIdentifier.Der, password.ToCharArray(), Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()), 10, bcPkey);

前のコードを実行すると、例外が発生します: PBE EncryptedPrivateKeyInfo生成"System.ArgumentExceptionで非 PBE アルゴリズムを使用しようとしています。

Google 検索では、関数のソース コード以外は何も明らかにされず、それをたどって解決策を見つけようとしましたが、見つけることができませんでした。

この関数を使用して、標準の.net秘密鍵からパスワードで保護されたPKCS8 DER鍵を作成する方法について、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

PrivateKeyFactory.EncryptKey の最初の引数は、暗号化するアルゴリズムを識別することになっています。最も簡単な方法は、 DerObjectIdentifier.Der の代わりに PKCSObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc など、標準の PBE アルゴリズムの ObjectIdentifier (OID) を指定することです。他に利用可能なアルゴリズムを確認したい場合は、PbeUtilities クラスを参照してください。

于 2013-03-17T12:15:09.647 に答える
0

PBEUtil でサポートされている PBE アルゴリズム:

PBEwithMD2andDES-CBC、PBEwithMD2andRC2-CBC、PBEwithMD5andDES-CBC、PBEwithMD5andRC2-CBC、PBEwithSHA1andDES-CBC、PBEwithSHA1andRC2-CBC、PBEwithSHA-1and128bitRC4、PBEwithSHA-1and40bitRC4、PBEwithSHA-1and3-keyDESEDE-CBC、PBEwithSHA-1and2-keyDESEDE、PBEwithSHA-1and2-keyDESEDE 1and128bitRC2-CBC、PBEwithSHA-1and40bitRC2-CBC、PBEwithHmacSHA-1、PBEwithHmacSHA-224、PBEwithHmacSHA-256、PBEwithHmacRIPEMD128、PBEwithHmacRIPEMD160、PBEwithHmacRIPEMD256。

例:

  private static string EncryptPrivateKey(AsymmetricKeyParameter privateKey)
    {
        var encKey  = PrivateKeyFactory.EncryptKey("PBEwithSHA1andDES-CBC", "test".ToCharArray(),
                                                        new byte[256], 1, privateKey);

        return Convert.ToBase64String(encKey);

    }
于 2013-11-19T14:03:13.557 に答える