私は成功せずにそれをやろうとして数日経ちました。
ここStackOverflowには似たような質問がたくさんあり、そのうちの 2つでさえ私のものとまったく同じですが、未回答で未解決です。
私のシナリオ: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 で初めてこの問題の答えを適切に得ることができたかもしれません:-)