Blowfish шифрование в Android - PullRequest
       2

Blowfish шифрование в Android

6 голосов
/ 25 декабря 2011
cipher = Cipher.getInstance("Blowfish");

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

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

Редактировать:

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" и тому подобное.Почему там нет Blowfish или он скрыт в тех числах?

Ответы [ 5 ]

2 голосов
/ 08 марта 2012

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

2 голосов
/ 25 декабря 2011

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

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

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

Руководство по установке: Как включить JAR Spongy Castle в Android?

2 голосов
/ 26 декабря 2011

local_policy.jar и US_export_policy.jar не имеют отношения к Android. Вам нужно запустить свой алгоритм, перечисляющий код на Android , чтобы получить значимый результат. Как уже отмечалось, поставщик Android JCE основан на Bouncy Castle, но он не включает в себя все алгоритмы. Вам нужно связать полную библиотеку в вашем приложении, чтобы иметь возможность использовать все алгоритмы. Используйте Spongy Castle , чтобы сделать это проще. После того, как вы это сделаете, единственное изменение, которое вам понадобится, это указать провайдера как «SC»:

Cipher c = Cipher.getInstance("Blowfish", "SC");
2 голосов
/ 25 декабря 2011

cipher = Cipher.getInstance("Blowfish")

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

РЕДАКТИРОВАТЬ: Если вы хотите построить до 2.3 или скажем4.0 ICS, но также поддерживает устройства более низкого уровня, вы можете добавить что-то подобное в свой Manifest.xml:

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

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

0 голосов
/ 05 февраля 2013

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

Мне пришлось скачать исходники надувного замка, я изменил имя провайдера с BC на BC2 и переименовал имя пакета в bouncycastle2, чтобы избежать конфликта с тем, что уже есть на Android SDK. Затем я добавил эту собственную банку Bouncy Castle в свое приложение в качестве новой банки, и она отлично работает!

...