5

Base64でエンコードされた文字列を受け取り、それをバイト配列に変換し、それを使用してX.509証明書を作成し、RSA暗号化のモジュラスと指数を取得するJavaコードを.NETに移植しようとしています。

これは、変換しようとしている Java コードです。

byte[] externalPublicKey = Base64.decode("base 64 encoded string");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(externalPublicKey);
Key publicKey = keyFactory.generatePublic(publicKeySpec);
RSAPublicKey pbrtk = (java.security.interfaces.RSAPublicKey) publicKey;
BigInteger modulus = pbrtk.getModulus();
BigInteger pubExp = pbrtk.getPublicExponent();

これを .NET に変換する最善の方法を見つけようとしています。これまでのところ、私はこれを思いつきました:

byte[] bytes = Convert.FromBase64String("base 64 encoded string");
X509Certificate2 x509 = new X509Certificate2(bytes);
RSA rsa = (RSA)x509.PrivateKey;
RSAParameters rsaParams = rsa.ExportParameters(false);
byte[] modulus = rsaParams.Modulus;
byte[] exponent = rsaParams.Exponent;

私にはそれがうまくいくように見えますが、Javaコードからベース64でエンコードされた文字列を使用してX509証明書を生成すると、 CryptographicExceptionがスローされます。私が受け取る正確なメッセージは次のとおりです。

要求されたオブジェクトが見つかりません。

Java の X.509 実装は .NET と互換性がないだけですか、それとも Java から .NET への変換に何か問題がありますか?

それとも、この場合、Java から .NET への変換がまったくないのでしょうか?

4

2 に答える 2

2

base64でエンコードされたデータはX.509証明書を表していないようです。

[ X509EncodedKeySpecクラス]は、公開鍵のASN.1エンコーディングを表します

X.509証明書全体をJavaでエクスポートするか、.NETFrameworkでX509EncodedKeySpecクラスに相当するものを見つけてください。

于 2010-03-28T19:16:34.153 に答える
0

私は同様の問題に遭遇しました、そして私の場合、それは「エンディアン」問題に要約されます。

解決策は、単にバイト配列を逆にすることでした(.NETのArray.Reverse)

証拠を示すために目の前に2つのIDEがありませんが、行き詰まった場合は試してみてください。

于 2010-03-28T19:19:12.247 に答える