Я несколько дней безуспешно пытался это сделать.
Здесь, в StackOverflow, есть много похожих вопросов, и даже два из них точно такие же, как у меня, но без ответа и нерешенные :1)Конвертировать PublicKey PHP RSA в PublicKey Android 2)Android :как расшифровать зашифрованный файл openssl с помощью ключа RSA?
Мой сценарий :У меня есть некоторый текст, зашифрованный с помощью RSA (, не зашифрованный мной ). У меня есть файл «public.key» в моей папке res/raw с открытым ключом, необходимым для его расшифровки (открытый ключ, связанный с закрытым ключом, используемым для шифрования сообщения ), с форматом, подобным следующему примеру:
Я вижу много примеров того, как расшифровать текст 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:-)