将字节数组转换为X.509证书

我正在尝试将一段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的转换?

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

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

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

我遇到过类似的问题,在我的情况下,它归结为一个’endian’问题。

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

我没有在我面前展示2个IDE来certificate,但如果你遇到困难,试一试吧!