Алгоритмы шифрования Bouncycastle не предоставляются - PullRequest
3 голосов
/ 07 января 2010

Я пытаюсь использовать BouncyCastle с Android для реализации ECDH и EL Gamal. Я добавил jar-файл bouncycastle (bcprov-jdk16-144.jar) и написал некоторый код, который работает с моими компьютерами jvm, однако, когда я пытаюсь перенести его в приложение для Android, он выдает:

java.security.NoSuchAlgorithmException: KeyPairGenerator ECDH implementation not found

Пример кода:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

java.security.KeyPairGenerator keyGen = org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator.getInstance("ECDH", "BC");
                ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");

                keyGen.initialize(ecSpec, SecureRandom.getInstance("SHA1PRNG"));



                KeyPair pair = keyGen.generateKeyPair();
                PublicKey pubk = pair.getPublic();
                PrivateKey prik = pair.getPrivate();

Затем я написал простую программу, чтобы увидеть, какие алгоритмы шифрования доступны, и запустил ее на моем эмуляторе Android и на моих компьютерах jvm код был:

Set<Provider.Service> rar = new org.bouncycastle.jce.provider.BouncyCastleProvider().getServices();
    Iterator<Provider.Service> ir = rar.iterator();
    while(ir.hasNext())
        System.out.println(ir.next().getAlgorithm());

На андроиде я не получаю ни одного алгоритма EC, хотя на моем компьютере работает нормально, все нормально.

Я также получаю следующие две ошибки при компиляции для многих классов надувных замков:

01-07 17: 17: 42.548: INFO / dalvikvm (1054): DexOpt: не разрешается неоднозначный класс 'Lorg / bouncycastle / asn1 / ASN1Encodable;'

01-07 17: 17: 42.548: DEBUG / dalvikvm (1054): DexOpt: не проверяется 'Lorg / bouncycastle / asn1 / ess / OtherSigningCertificate;': несколько определений

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

Ответы [ 3 ]

9 голосов
/ 14 июля 2011

Вы, вероятно, хотите Spongy Castle - перепаковка, которую я сделал из Bouncy Castle, специально предназначенной для Android. Как отмечено здесь:

http://code.google.com/p/android/issues/detail?id=3280

... платформа Android, к сожалению, включает урезанную версию Bouncy Castle, что также затрудняет установку обновленной версии библиотек из-за конфликтов с загрузчиком классов - даже если вы добавите полную версию BC, вы не получите дополнительные классы, которые вы добавили.

Spongy Castle - полная замена поврежденных версий криптографических библиотек Bouncy Castle, которые поставляются с Android. Есть несколько небольших изменений, чтобы он работал на Android:

  • все имена пакетов были перемещены из org.bouncycastle. * В org.spongycastle. * - так что нет конфликтов с загрузчиками классов
  • Имя поставщика API безопасности Java теперь SC , а не BC
1 голос
/ 19 ноября 2010

Если вы просматриваете код Android, вы увидите, что включены не все функции BouncyCastle. см. libcore / security / src / main / java / org / bouncycastle / jce / provider / BouncyCastleProvider.java

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

1 голос
/ 08 января 2010

Не знаю, отвечает ли это на ваш вопрос, но некоторые библиотеки BouncyCastle уже есть в Android SDK.Возможно, ошибка в неоднозначном классе связана с тем, что BouncyCastle уже включен в эмулятор.

Кажется, вы можете использовать его через javax.crypto.Cipher class .

...