Шифрование Blowfish в android

cipher = Cipher.getInstance("Blowfish");

это вызывает исключение java.безопасность.NoSuchAlgorithmException: реализация шифра Blowfish не найдена.

Я проверил оба local_policy.jar и US_export_policy.jar существуют, и они не были изменены с момента установки java. Что может вызвать эту проблему?

Edit:

Object[] o = Security.getAlgorithms("Cipher").toArray();
    for (int i=0; i<o.length; i++) {
        System.out.println((String)o[i]);
    }

когда я запускаю этот код, я получаю список без "Blowfish", но среди имен алгоритмов, таких как DES или RSA, есть некоторые неизвестные имена, такие как "1.2.840.113549.1.1.7" и тому подобное. Почему там нет иглобрюха или он спрятан в этих цифрах?

5 ответов


cipher = Cipher.getInstance("Blowfish")

работает только с Android 2.3 и выше, так что вполне может быть, что ваша цель ниже Android 2.3?

EDIT: если вы хотите построить 2.3 или, скажем, 4.0 ICS, но также поддерживаете более низкие устройства, вы можете добавить что-то подобное в свой Манифест.XML-код:

<uses-sdk android:minSdkVersion="3" />
<uses-sdk android:targetSdkVersion="14" />

единственная проблема заключается в том, что вам придется предложить Blowfish в качестве опции, которая не будет допустимым выбором (unclickable/greyed out) метода шифрования для любого под 2.3, я бы предположил. Тест это! Создайте его и попробуйте на различных версиях SDK. Удачи!


единственное решение, которое я могу предложить-это внешний пакет, если вы хотите полную поддержку платформы.

Android поставляется с раздетой версией BouncyCastle. Который, я считаю, имеет дополнительные функции, добавленные по мере продвижения версий.

однако импорт полного BouncyCastle jar в android вызывает множество проблем, поскольку версия Android использует те же имена.

решение, которое я использовал, - использовать SpongyCastle. Я использовал это раньше, но не просматривали исходный код, чтобы убедиться, что никаких изменений не было сделано.

руководство по установке: Как включить губчатый замок банку в Android?


local_policy.jar и US_export_policy.jar не имеют отношения к Android. Вам нужно запустить свой алгоритм listing code на Android получить значимый результат. Как отмечали другие, поставщик Android JCE основан на Bouncy Castle, но он не включает в себя все алгоритмы. Вам нужно собрать полную lib в вашем приложении, чтобы иметь возможность использовать все алгоритмы. Используйте Губчатой Замок чтобы сделать это проще. После этого единственное изменение, которое вам потребуется, чтобы указать провайдер как 'СК':

Cipher c = Cipher.getInstance("Blowfish", "SC");

Да, я не смог найти решение и просто использовал криптографическую библиотеку GNU. Работает отлично.


Я использовал шифрование blowfish в своем приложении для android. Я не знаю, почему, но шифрование blowfish было прокомментировано из библиотеки надувного замка на android.

Мне пришлось загрузить источники bouncy castle, я изменил имя поставщика с BC На BC2 и переименовал имя пакета в bouncycastle2, чтобы избежать конфликта с тем, который уже есть на Android sdk . Затем я добавил этот пользовательский надувной замок jar в мое приложение в качестве новой банки, и он отлично работает !