2017-01-23 4 views
0

Ситуация:Не удалось расшифровать (ПАД блок поврежден) в Android (PBEWithMD5AndDES)

  • Строка становится зашифрованы в среде Java (javax.crypto.Cipher/PBEWithMD5AndDES), в кодировке base64
  • Строка перечисляется в используется Android
  • же крипто декодер, только разные base64 библиотека

=> мы не смогли расшифровать, получая

java.lang.SecurityException: Не удалось расшифровать: блок колодки поврежден

В ходе анализа мы сравнили массивы байтов, передаваемых методу декодирования(), для того, чтобы пропустить все возможные проблемы base64 и массивы идентичны.

Опять же, два идентичных байтовых массива, переданные в один и тот же модуль java, создают разные результаты (ok на java, исключение на android).

Параметры, переданные в модуль Cipher, жестко закодированы и идентичны на обеих платформах.

Где разницу

+0

Просьба представить фактический код, который вы используете для шифрования и дешифрования, и тестовый вектор, который работает на настольной Java, но не на Android. – Andy

+0

Спасибо за предложение. Похоже, мы нашли причину - были использованы разные провайдеры. –

ответ

1

Мы наконец-то нашли разницу между Java и Android кода. Оказалось, что компонент Cipher является просто контейнером и ничего не реализует сам по себе. Реализация конкретного алгоритма выполняется поставщиком, и на каждой платформе настроен другой список поставщиков. В нашем случае, если была реализация Sun для Java и Bouncy Castle для Android. Итак, оказалось, что wir случайно использовал алгоритм шифрования, реализация которого была различной для разных провайдеров.

Смежные вопросы