我已经尝试了几天但没有成功。
StackOverflow 中有很多类似的问题,甚至其中两个与我的完全相同,但未得到解答和解决:1)将 PHP RSA PublicKey 转换为 Android PublicKey 2)Android:如何使用 RSA 密钥解密 openssl 加密文件?
我的场景:我有一些使用 RSA 加密的文本(我没有加密)。我的 res/raw 文件夹中有一个“public.key”文件,其中包含解密它所需的公钥(与用于加密消息的私钥相关的公钥),其格式类似于以下示例:
我看到很多关于如何解密 RSA 文本的示例,如下所示:
public static byte[] decryptRSA( PublicKey key, byte[] text) throws Exception
{
byte[] dectyptedText = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
return dectyptedText;
}
但我的问题是,如何从文件中获取正确的 PublicKey 实例?没有这方面的例子。
如果我只是尝试:
InputStream is = getResources().openRawResource(R.raw.public);
DataInputStream dis = new DataInputStream(is);
byte [] keyBytes = new byte [(int) is.available()];
dis.readFully(keyBytes);
dis.close();
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(spec);
我在返回语句中得到一个 InvalidKeyException。我需要解码 Hex 或 Base64 吗?公钥文件的第一行和最后一行不是问题吗(带有“----BEGIN PUBLIC KEY----”的那些)?
也许我们可以在 StackOverflow 中第一次正确地得到这个答案:-)