Android XML RSA,错误:java.security.InvalidKeyException:传递给RSA的密钥类型未知

Android XML RSA,错误:java.security.InvalidKeyException:传递给RSA的密钥类型未知,java,android,xml,encryption,cryptography,Java,Android,Xml,Encryption,Cryptography,我在使用RSA加密字符串时遇到问题。 我的RSA是XML格式的,它看起来像: <RSAKeyValue><Modulus>lT8ykfyV0R8o3mJZZezLKTKJpYB90Pzvp0moLzh9CTGfgsxLKYiAl+YGaoRfQ7hVQos5UlLIONHWKPNco9kKcmL6EBJvFc8wqBnhX0p4ML2WSv1yDIRsm9XXra82WHIa3+fxK8bNUJHrucxmpr9pDRPdZGZkz+Q9s94FcOyFKbs=</

我在使用RSA加密字符串时遇到问题。 我的RSA是XML格式的,它看起来像:

<RSAKeyValue><Modulus>lT8ykfyV0R8o3mJZZezLKTKJpYB90Pzvp0moLzh9CTGfgsxLKYiAl+YGaoRfQ7hVQos5UlLIONHWKPNco9kKcmL6EBJvFc8wqBnhX0p4ML2WSv1yDIRsm9XXra82WHIa3+fxK8bNUJHrucxmpr9pDRPdZGZkz+Q9s94FcOyFKbs=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
正如你所看到的,我用的是bouncycastle的罐子 我得到的错误是: java.security.InvalidKeyException:传递给RSA的密钥类型未知

这部分我不太清楚

Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
也许这就是问题所在? 如果是的话,需要什么来代替呢

我做了几个小时的研究,仍然没有找到解决办法

提前感谢:)

XML不是PEM

您需要从XML中提取模数和公共指数,然后使用
“RSA”
KeyFactory
实例和

也许这就是问题所在

不,不是

OAEPWith<digest>And<mgf>Padding

谢谢,但现在我遇到了另一个问题:我正在使用您的方法java.lang.NumberFormatException:Invalid int:“pD”模数和指数是Base64编码的,您需要先对它们进行解码。请看,当我解码你的指数
AQAB
时,我得到了十六进制
010001
,它是
65537
常用的公共指数。这就是我得到的,我正在尝试对它进行base64解码:指数﹕ �� 它不会给我一个机会number@TomerOfer,这意味着您的解码过程失败,无法查看结果。@TomerOfer,在base64解码后,您可能会得到
字节数组而不是十六进制字符串,因此您可以直接使用它们。请参阅我编辑过的答案。谢谢,现在我尝试使用从XML中提取的模和指数,我该怎么做?我确实尝试了raked.void建议的方法,但还没有成功。
Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
OAEPWith<digest>And<mgf>Padding
BigInteger modBigInteger = new BigInteger(1, modulus);//modulus must be byte array
BigInteger exBigInteger = new BigInteger(1, exponent);//exp must be byte array

RSAPublicKeySpec spec = new RSAPublicKeySpec(modBigInteger, exBigInteger);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(spec);