2011-12-25 2 views
5
cipher = Cipher.getInstance("Blowfish"); 

Ceci déclenche une exception java.security.NoSuchAlgorithmException: Implémentation de Cipher Blowfish non trouvée.Cryptage Blowfish dans android

J'ai vérifié que local_policy.jar et US_export_policy.jar existent et qu'ils n'ont pas été modifiés depuis l'installation de java. Qu'est-ce qui peut causer ce problème?

Edit:

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

Quand je lance ce code, je reçois la liste sans « Blowfish », mais parmi les noms d'algorithmes tels que DES ou RSA il y a des noms inconnus tels que « 1.2.840.113549.1.1.7 » et comme ça. Pourquoi n'y a-t-il pas de Blowfish ou est-ce caché dans ces chiffres?

Répondre

2

Yeap, je ne pouvais pas trouver la solution et juste utilisé la bibliothèque GNU Crypto. Ça fonctionne bien.

2

cipher = Cipher.getInstance("Blowfish")

fonctionne uniquement avec Android 2.3 et plus, donc il se peut que votre cible est inférieure à Android 2.3?

EDIT: Si vous voulez construire à 2,3 ou disons 4.0 ICS mais aussi le soutien des dispositifs plus bas, vous pouvez ajouter quelque chose comme ceci à votre Manifest.xml:

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

Le seul problème est que vous devez offrir Blowfish comme une option qui ne serait pas un choix valide (non cliquable/grisé) d'une méthode de cryptage pour toute personne de moins de 2,3, je suppose. Essaye-le! Construisez-le et essayez-le sur différentes versions du SDK. Bonne chance!

+0

J'utilise Android 2.1, alors comment puis-je utiliser Blowfish dans Android 2.1? – Sergey

+0

Malheureusement, vous ne pouvez pas. Mais, vous pouvez toujours cibler 2.3 mais autoriser des versions plus faibles du SDK comme celle-ci. Je vais poster le code dans une modification ci-dessus comme une solution. – TryTryAgain

+0

c'est le problème, j'ai besoin de crypter et décrypter la plate-forme 2.1 – Sergey

2

La seule solution que je peux suggérer est un paquet externe si vous voulez un support complet de la plate-forme.

Android est livré avec une version dépouillée de BouncyCastle. Ce que je crois est d'avoir des fonctions supplémentaires ajoutées au fur et à mesure que les versions progressent. Toutefois, l'importation du fichier BouncyCastle complet dans Android entraîne de nombreux problèmes, car la version Android utilise les mêmes noms.

La solution que j'ai utilisée est d'utiliser SpongyCastle. Je l'ai déjà utilisé, mais je n'ai pas regardé le code source pour m'assurer qu'aucun changement n'a été fait.

Un guide pour l'installation: How to include the Spongy Castle JAR in Android?

2

local_policy.jar et US_export_policy.jar ne sont pas pertinentes pour Android. Vous devez exécuter votre code d'inscription d'algorithme sur Android pour obtenir un résultat significatif. Comme d'autres l'ont noté, le fournisseur Android JCE est basé sur Bouncy Castle, mais il n'inclut pas tous les algorithmes. Vous devez regrouper la bibliothèque complète dans votre application pour pouvoir utiliser tous les algorithmes. Utilisez Spongy Castle pour rendre cela plus facile. Une fois que vous faites, le seul changement que vous aurez besoin est de spécifier le fournisseur comme « SC »:

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

J'ai utilisé le cryptage blowfish sur mon application android. Je ne sais pas pourquoi mais le cryptage blowfish a été commenté hors de la bibliothèque du château gonflable sur android.

J'ai dû télécharger les sources du château gonflable, j'ai changé le nom du fournisseur de BC en BC2 et renommé le nom du paquet en bouncycastle2 pour éviter un conflit avec celui déjà sur le android sdk. Puis j'ai ajouté ce pot Bouncy Castle personnalisé dans mon application comme un nouveau pot et ça fonctionne bien!