如何在java / Android中使用C#生成的RSAPrivate密钥?

时间:2018-02-02 05:19:29

标签: java c# android rsa

我的服务器端(C#或.Net)人员给我一个 xml 格式的RSA密钥对,但问题是我无法在我的 Java / Android中使用给定的密钥代码,它总是抛出 InValidKeySpec 异常。

我以某种方式将RSAPublic密钥转换为Java可理解的RSAPublic密钥格式 -

String Modoutput = "pgFkNu7tN3K8VCxxvKMFwqaRJ6I158/aihg1J1p13P5HvVz8Pn2oC7hfdhujlQxHPsV/b8Rc3Snq5KGmC4VBnw==";
            String Expoutput = "AQAB";

            byte[] exponentBytes = Base64.decode(Expoutput);
            byte[] modulusBytes =  Base64.decode(Modoutput);

            BigInteger e = new BigInteger(1, exponentBytes);
            BigInteger m = new BigInteger(1, modulusBytes);
            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
            PublicKey mServerPublicKey = rsaKeyFactory.generatePublic(keySpec);

但无法将 RSAPrivate(C#)键转换为 Java / Android 可理解。 我试过这个linkthis

我正在研究这个但没有取得任何成功,需要专家的帮助。

快乐编码: - )

2 个答案:

答案 0 :(得分:0)

假设您的XML中有私有指数,这是用于在Java中生成私钥的等效代码。对于Android,请替换base64编码部分

String privateExponentB64 = "...";
String modulusB64 = "...";

byte[] privateExponentBytes = Base64.getDecoder().decode(privateExponentB64);
byte[] modulusBytes = Base64.getDecoder().decode(modulusB64);

BigInteger privateExponent = new BigInteger(1, privateExponentBytes);
BigInteger modulus = new BigInteger(1, modulusBytes);
RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(modulus, privateExponen);
KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(privateKeySpec);

答案 1 :(得分:-1)

您可以从此链接中获取参考资料

How do I use a C# generated RSA public key in Android?

因为它似乎对你有所帮助