1

既存の Java アプリケーションの c# で新しいバージョンを開発しています。

既存のアプリケーションは、java.security.spec.* および boncycastle api で RSA 暗号化を使用します。

コードの下のJavaのC#で同等のコードを探しています:

public static java.security.PublicKey getKey
(
org.bouncycastle.asn1.x509.RSAPublicKeyStructure  rsaPublicKey
)
{

java.security.KeyFactory keyFactory = KeyFactory.getInstance("RSA");

 java.security.spec.RSAPublicKeySpec keySpec = new RSAPublicKeySpec(
rsaPublicKey.getModulus(), 
rsaPublicKey.getPublicExponent());

java.security.PublicKey pkey = keyFactory.generatePublic(keySpec);

return pkey;
}

私はたくさん「グーグル」しましたが、解決策が見つかりませんでした。

よろしくお願いします。

4

2 に答える 2

2

すでにお気づきかもしれませんが、 Bouncy Castleの .NET バージョンがあるので、C# プロジェクトで使用できます。

あなたの質問に関しては、純粋な Bouncy Castle で署名を実装する例を次に示します。これは、MakeKey メソッドでキー生成を処理するため、参照してください。

ところで、このキーが証明書に含まれている場合は、.NET X509Certificate2 クラスを参照してください。

編集

私はあなたのメソッドを同等のac#に変換しようとしましたが、これは私が得たものに近づきました:

public static byte[] getKey(Org.BouncyCastle.Asn1.x509.RSAPublicKeyStructure  rsaPublicKey)
{
    Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters bcKeySpec = new RsaKeyParameters();
    bcKeySpec.RsaKeyParameters(false, rsaPublicKey.getModulus(), rsaPublicKey.getPublicExponent());
    RSAParameters keySpec = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(bcKeySpec);
    RSACryptoServiceProvider keyFactory = new RSACryptoServiceProvider();
    keyFactory.ImportParameters(keySpec);
    byte[] pKey = keyFactory.ExportCspBlob(false);
    return pKey;
}

キーはバイト配列にエクスポートされることに注意してください。これは、後でキーを使用して何をしたいかによって、役立つ場合とそうでない場合があります。また、RSACryptoServiceProvider オブジェクトを使用すると、暗号化、復号化、署名、検証を行うことができます。これらの目的のいずれかのために鍵を取得する場合は、エクスポートされた公開鍵の代わりに keyFactory オブジェクトを返したい場合があります。

RSACryptoServiceProvider の詳細については、http://msdn.microsoft.com/en-us/library/s575f7e2.aspx を参照してください。

于 2013-04-15T19:44:49.490 に答える