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

Esto arroja una excepción java.security.NoSuchAlgorithmException: Implementación de Cipher Blowfish no encontrada.Cifrado de Blowfish en android

Comprobé que existían tanto local_policy.jar como US_export_policy.jar y no se modificaron desde el momento de la instalación de Java. ¿Qué puede causar este problema?

Editar:

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

Cuando ejecuto el código consigo lista sin "Blowfish", pero entre los nombres de algoritmos tales como DES o RSA hay algunos nombres desconocidos como "1.2.840.113549.1.1.7" y así. ¿Por qué no hay Blowfish allí o está escondido en esos números?

Respuesta

2

Yeap, no pude encontrar la solución y acabo de utilizar la biblioteca de criptografía de GNU. Funciona bien.

2

cipher = Cipher.getInstance("Blowfish")

sólo funciona con Android 2.3 y superior, por lo que puede ser que su objetivo está por debajo de Android 2.3?

EDIT: Si usted quiere construir a 2.3 o digamos 4.0 ICS, sino también soportar dispositivos inferiores se puede añadir algo como esto a su Manifest.xml:

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

El único problema es que tendría que ofrecer Blowfish como una opción que no sería una opción válida (no cliqueable/en gris) de un método de encriptación para cualquier persona menor de 2.3, supongo. ¡Pruébalo! Compilalo y pruébalo en una variedad de versiones de SDK. ¡Buena suerte!

+0

Uso Android 2.1, entonces ¿cómo puedo usar Blowfish en Android 2.1? – Sergey

+0

Desafortunadamente, no puedes. Sin embargo, siempre podría apuntar a 2.3 pero permitir versiones más bajas de SDK como esta. Voy a publicar el código en una edición anterior como una solución. – TryTryAgain

+0

ese es el problema, necesito 2.1 plataforma – Sergey

2

La única solución que puedo sugerir es a un paquete externo si desea soporte completo para la plataforma.

Android viene con una versión eliminada de BouncyCastle. Lo que creo es tener funciones adicionales agregadas a medida que avanzan las versiones.

Sin embargo, la importación de la jarra BouncyCastle completa en Android causa muchos problemas ya que la versión de Android usa los mismos nombres.

La solución que he usado es usar SpongyCastle. Lo he usado antes, pero no he revisado el código fuente para asegurarme de que no se hayan realizado cambios.

Una guía para instalar: How to include the Spongy Castle JAR in Android?

2

local_policy.jar y US_export_policy.jar no son relevantes para Android. Necesita ejecutar su código de listado de algoritmo en Android para obtener un resultado significativo. Como otros han notado, el proveedor de Android JCE se basa en Bouncy Castle, pero no incluye todos los algoritmos. Necesitas agrupar la lib completa en tu aplicación para poder usar todos los algoritmos. Use Spongy Castle para hacer esto más fácil. Después de hacerlo, el único cambio que se necesita es especificar el proveedor como 'SC':

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

Utilicé cifrado blowfish en mi aplicación para Android. No sé por qué, pero el encriptado blowfish ha sido comentado en la biblioteca del castillo hinchable en Android.

Tuve que descargar las fuentes del castillo hinchable, cambié el nombre del proveedor de BC a BC2 y renombré el nombre del paquete en bouncycastle2 para evitar un conflicto con el que ya estaba en el SDK de Android. ¡Luego agregué este tarro personalizado de Bouncy Castle a mi aplicación como un nuevo tarro y funciona bien!