5

我正在尝试将一段 Java 代码移植到 .NET 中,该代码采用 Base64 编码字符串,将其转换为字节数组,然后使用它来制作 X.509 证书以获取 RSA 加密的模数和指数。

这是我要转换的 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 代码中的 base 64 编码字符串生成 X509 证书时,它会引发CryptographicException 。我收到的确切消息是:

找不到请求的对象。

Java 的 X.509 实现是否与 .NET 不兼容,或者我在从 Java 到 .NET 的转换中做错了什么?

或者在这种情况下根本没有从 Java 到 .NET 的转换?

4

2 回答 2

2

您的 base64 编码数据似乎不代表 X.509 证书:

[ X509EncodedKeySpec 类] 表示公钥的 ASN.1 编码

以 Java 导出整个 X.509 证书,或尝试在 .NET 框架中找到与 X509EncodedKeySpec 类等效的类。

于 2010-03-28T19:16:34.153 回答
0

我遇到了类似的问题,就我而言,它归结为“字节序”问题。

解决方案是简单地反转字节数组(.NET 中的 Array.Reverse)

我没有摆在我面前的 2 个 IDE 来证明,但是如果您遇到困难,请尝试一下!

于 2010-03-28T19:19:12.247 回答