Intereting Posts
Как поддерживать ссылки Amazon и Android Market (Google Play) в том же APK Сколько памяти должно использовать типичное приложение для Android? Скорость «null» с плагином геолокации на Android 5+ Мониторинг всех событий Android-устройств удаленно Как вы получаете контактную фотографию через поставщика контактов в android 2.3.6? Android, который нажал кнопку индекса из массива Firebase Messaging – «слишком много сигналов тревоги» на устройствах Android от Samsung Ошибка: для Multi Dex требуется версия Build Tools Android Google Music API – весь доступ Как разместить нижний центр объявления Admob на экране? (Использование java-кода для размещения.) Как исправить утечку памяти в Android, связанную с Threads? Как связать проект библиотеки в Android Studio Тень CardView не отображается при преобразовании в растровое изображение Android RSA Keypair Generation – Должен ли я использовать стандартный Java / Bouncy Castle / Spongy Castle / JSch / Other? Android – не удается найти TextView внутри SearchWidget при использовании библиотеки поддержки Android

Шифрование RSA с открытым ключом с кодировкой base64 в Android

Как сделать RSA-шифрование байтового массива с открытым ключом с кодировкой base-64?

Прочитав пару статей (google search) о том, как сделать шифрование RSA в Java, нашел следующий фрагмент

public byte[] rsaEncrypt(byte[] data) { PublicKey pubKey = readKeyFromFile("/public.key"); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(src); return cipherData; } 

У меня есть открытый ключ как кодированная base64 строка (126 символов), как мне создать «PublicKey» с кодированной строкой и использовать ее с Cipher.

Ваша строка base64 может быть X509EncodedKeySpec. Я могу только догадываться. Если это так, вы должны base64 декодировать строку, чтобы получить byte [] . Затем X509EncodedKeySpec из этого byte [] . Затем создайте экземпляр RSA KeyFactory и используйте метод generatePublic() этого KeyFactory для получения PublicKey . Затем этот открытый ключ можно передать в Cipher.init() .

Примечание: для выполнения декодирования base64 используется либо кодек apache commons , либо декодер Harder base64 .

ОБНОВЛЕНИЕ 8 марта 2017 года. В новостях более поздних, чем никогда, Java 8 теперь включает в себя класс кодирования / декодирования Base64, java.util.Base64

Это то, как вы можете создать парную партию Public и Private ниже, это функция для их хранения на жестком диске

 enter code here public static void GenerateKeyPair() { try{ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair kp = kpg.genKeyPair(); KeyFactory fact = KeyFactory.getInstance("RSA"); RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(), RSAPublicKeySpec.class); RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(), RSAPrivateKeySpec.class); saveToFile("public.key", pub.getModulus(), pub.getPublicExponent()); saveToFile("private.key", priv.getModulus(), priv.getPrivateExponent()); }catch(Exception e){ System.out.println(e.getMessage()); } } public static void saveToFile(String fileName, BigInteger mod, BigInteger exp) throws Exception { ObjectOutputStream oout = new ObjectOutputStream( new BufferedOutputStream(new FileOutputStream(fileName))); try { oout.writeObject(mod); oout.writeObject(exp); } catch (Exception e) { throw new Exception("error", e); } finally { oout.close(); } }