2012-04-08 23 views
11

Escribí un proveedor de seguridad personalizado para AES/CBC/PKCS5Padding. Eso funciona bien¿Cómo hago para que Java use mi proveedor de seguridad?

¿Qué configuraciones necesito agregar al Provider para que Java lo reconozca como un proveedor válido para el algoritmo anterior? Ya tengo

public class FooBarProvider extends Provider { 
    public FooBarProvider() { 
    super("FooBar", 1.0, "Provider for AES."); 
    put("Cipher.AES", "foo.bar.AESCipher"); 
    } 
} 

donde el último argumento es el CipherSpi real que hace el trabajo. ¿Dónde registro el hecho de que es compatible con CBC y PKCS5Padding? Actualmente pidiendo una relevante Cipher no devuelve una instancia de mi clase:

Security.insertProviderAt(new FooBarProvider(), 1); 
Cipher cip = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
System.out.println(cip.getProvider()); //prints "SunJCE version 1.7" 

Respuesta

7

escribir el código es la parte más simple del proceso. Ya ha declarado que sus clases proporcionan una implementación de Cipher para AES. Esta línea:

put("Cipher.AES", "foo.bar.AESCipher"); 

es prácticamente todo lo que necesita para llevar a cabo la tarea. También tenga en cuenta que su implementación se llamará automáticamente para todas las combinaciones de modo y relleno, ya que ha registrado su implementación de cifrado en el nivel de algoritmo.

Habiendo dicho eso, escribir el código fue la parte fácil. Está creando un cifrado, por lo que deberá firmar su JAR antes de poder instalarlo y configurarlo como proveedor. Debido a que el proceso está algo involucrado, no lo copiaré todo aquí, sino que lo referiré al Oracle Guide on How to implement a Provider. Es una excelente fuente para esta tarea.

Si sigue la guía y todavía tiene problemas, puede necesitar descargar e instalar el JCE Unlimited Strength Policy apropiado para su JDK instalado.

+0

Entonces, ¿ni siquiera puedo instalarlo para probar su implementación? –

2

La documentación de Java Crypto describe los mecanismos para el registro de una clase Provider:

El corto la versión es:

  1. Coloque el JAR del proveedor en el classpath o en el directorio de extensiones de la instalación de Java.
  2. registrar el proveedor:
    • editar el archivo de configuración java.security (en la instalación de Java), o
    • en tiempo de ejecución, o llaman Security.addProviderSecurity.insertProviderAt.
+0

Tengo esa parte (observe la llamada 'insertProviderAt' anterior), pero ¿cuál es la sintaxis para registrar que mi cifrado admite CBC y PKCS5Padding? –

Cuestiones relacionadas