Android :расшифровывает текст RSA с помощью открытого ключа, хранящегося в файле

Я несколько дней безуспешно пытался это сделать.

Здесь, в StackOverflow, есть много похожих вопросов, и даже два из них точно такие же, как у меня, но без ответа и нерешенные :1)Конвертировать PublicKey PHP RSA в PublicKey Android 2)Android :как расшифровать зашифрованный файл openssl с помощью ключа RSA?

Мой сценарий :У меня есть некоторый текст, зашифрованный с помощью RSA (, не зашифрованный мной ). У меня есть файл «public.key» в моей папке res/raw с открытым ключом, необходимым для его расшифровки (открытый ключ, связанный с закрытым ключом, используемым для шифрования сообщения ), с форматом, подобным следующему примеру: enter image description here

Я вижу много примеров того, как расшифровать текст 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:-)

16
задан Community 23 May 2017 в 12:18
поделиться