我试图将一段Java代码移植到.NET中,该.NET使用Base64编码的字符串将其转换为字节数组,然后使用它来创建X. 509证书来获得RSA加密的模数&指数。将字节数组转换为X.509证书
这是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;
这对我看起来像它应该工作,但它抛出一个CryptographicException当我使用base 64编码字符串从Java代码来生成X509证书。我收到的确切消息是:
找不到请求的对象。
Java的X.509实现是否与.NET不兼容,或者我在从Java到.NET的转换中做错了什么?
或者在这种情况下,是否存在从Java到.NET的转换?
也许你可以发布证书的base64字符串,以便人们可以看看它? – dtb 2010-03-28 19:36:20
这只是一个公钥,它不是* X509证书。 – 2010-03-29 22:31:59