我的服务器端(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 可理解。 我试过这个link和this
我正在研究这个但没有取得任何成功,需要专家的帮助。
快乐编码: - )
答案 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)