Шифрование RSA: разница между Java и Android

Я использую RSA для шифрования имени пользователя и пароля на Android и расшифровки их на сервере (tomcat 6, java 1.6). Android Encryption:

PublicKey pubKey = readPublicKeyFromFile(mod, ex); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(data); return cipherData; 

Расширение Java Tomcat:

  PrivateKey pubKey = readPrivateKeyFromFile(mod, ex); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(data); return cipherData; 

Если я использую android part OUTSIDE android (только в основном методе), он отлично работает. Но не внутри моего андроида (Эмулятор). На стороне сервера я получаю следующую ошибку:

 javax.crypto.BadPaddingException: Blocktype mismatch: 0 at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255) at com.sun.crypto.provider.RSACipher.a(DashoA13*..) at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) 

Я поддерживаю mod и ex как константы BigIntegers, поэтому я не пишу их в файл. Я знаю, что есть разница между java1.6 и java 1.5, так что оба скомпилированы с java 1.6.

Некоторая информация об отладке:

Во время отладки в android я вижу, что pubKey содержит модуль и показатель в шестнадцатеричном формате. И если я отлаживаю основной метод (опять тот же код), я вижу, что pubKey содержит модуль и показатель степени в десятичной системе.

Что я делаю не так?

благодаря

Im делает RSA Encrypt в Android 2.2+ и расшифровывает на сервере tomcat 6 java 1.6.

Я получал эту точную проблему, читал повсюду и частично благодаря ответу @Femi, я наткнулся на то, что мне было нужно.

Решение состояло в том, чтобы использовать следующую спецификацию алгоритма для Cipher:

 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 

Это делает шифрование как с Android, так и с BlackBerry смартфонов. Я знаю, что прошло четыре месяца с тех пор, как был задан вопрос, но на всякий случай кто-то другой справляется с этой проблемой.

Я предлагаю вам использовать определенную инициализацию шифрования: в качестве примера,

 Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding"); 

Будет работать на обоих. Исключение, которое вы получаете ( исключение BadPaddingException ), происходит из-за того, что стандартное заполнение инициализации по умолчанию отличается от JVM для настольных компьютеров и JVM для Android.

Во-первых, похоже, что вы инициализируете оба шифра открытым ключом. Шифрование использует открытый ключ, дешифрование использует закрытый ключ. Надеюсь, это просто опечатка.

У меня было много проблем с RSA-шифрованием, многое было проб и ошибок. Я предлагаю вам попробовать другой провайдер. Мне удалось реализовать RSA с помощью BouncyCastle.

 Cipher wrapper = Cipher.getInstance("RSA", "BC"); wrapper.init(Cipher.ENCRYPT_MODE, publicKey); encryptedData= wrapper.doFinal(unencryptedData); 

Хотя, я создал свою собственную пару ключей, поскольку это было сеансовое шифрование.

 kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 
Intereting Posts
Android Studio: как отлаживать старую версию Android SDK шаг за шагом Flash-факел на Google Nexus 5 Как разместить ProgressBar внутри ListView? Закрытие приложения Android при завершении отладки кода Ошибка андроида в учебнике не может найти символьную переменную activity_display_message Genymotion Google Nexus 6P 7.0.0 с Open_Gapps arm 7.0.0 Создание приложения для Android Android .axml intellisense не работает с элементами управления библиотекой поддержки. Stackoverflow: вызвано вложенными представлениями? «Тип TabActivity устарел» Для вкладки «Приложение» Показывает, что «ваше устройство несовместимо с этой версией» для моего платного приложения на Nexus 7 Ошибка получения родительского элемента: не найден ресурс, который соответствует указанному имени «@android: style / Theme.AppCompat.Light.DarkActionBar» Приложение SIP для Android, использование служб и действий Phonegap Media error code 1 воспроизведение локального mp3-файла в Android-устройстве Анимационный вид добавлен в WindowManager