Шифрование 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 в мое приложение в качестве новой банки, и он отлично работает !