vernam para hill encriptar encriptacion ejemplos desencriptar codigo cifrado java encryption jvm jasypt

para - encriptar y desencriptar rsa en java



¿Cómo puedo averiguar qué algoritmo[cifrado] es compatible con mi JVM? (5)

Estoy usando Jasypt para el cifrado. Este es mi código:

public class Encryptor { private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor(); private final static String PASSWORD = "FBL"; private final static String ALGORITHM = "PBEWithMD5AndTripleDES"; static{ pbeEncryptor.setPassword( PASSWORD ); //pbeEncryptor.setAlgorithm( ALGORITHM ); } public static String getEncryptedValue( String text ){ return pbeEncryptor.encrypt( text ); } public static String getDecryptedValue( String text ){ return pbeEncryptor.decrypt( text ); } }

setAlgorithm línea setAlgorithm y lanzará una excepción

org.jasypt.exceptions.EncryptionOperationNotPossibleException : El cifrado generó una excepción. Una posible causa es que está utilizando algoritmos de cifrado potentes y no ha instalado los archivos de política de jurisdicción de fuerza ilimitada Java Cryptography Ex tension (JCE) en esta máquina virtual Java.

api dice:

Establece el algoritmo que se utilizará para el cifrado Establece el algoritmo que se utilizará para el cifrado, como PBEWithMD5AndDES.

Este algoritmo debe ser compatible con su proveedor de JCE (si especifica uno, o el proveedor de JVM predeterminado si no lo tiene) y, si es compatible, también puede especificar el modo y el relleno para él, como ALGORITMO / MODO / ACOLCHADO .

consulte: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

Ahora, cuando comentas ''setAlgorithm'' utilizará el Algoritmo predeterminado [supongo que es md5], y funcionará bien. Eso significa que md5 es compatible con mi JVM. Ahora, cómo averiguar qué otros algoritmos de cifrado son compatibles con mi JVM.

Gracias,


A continuación, se enumerarán todos los proveedores y los defensores de los algoritmos. ¿Qué versión de Java estás usando? A menos que esté en una versión anterior, JCE debería incluirse como estándar.

import java.security.Provider; import java.security.Security; public class SecurityListings { public static void main(String[] args) { for (Provider provider : Security.getProviders()) { System.out.println("Provider: " + provider.getName()); for (Provider.Service service : provider.getServices()) { System.out.println(" Algorithm: " + service.getAlgorithm()); } } } }

Editar: ¿Alguna razón por la que no usa el material estándar del paquete javax.crypto?

1) Generar una Key usando

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray()));

2) Crea un Cipher usando

cipher = Cipher.getInstance(algorithm);

3) Inicia tu cifrado con la clave

cipher.init(Cipher.ENCRYPT_MODE, key);

4) Hacer la encriptación con

byte[] encrypted = cipher.doFinal(data)


La herramienta de línea de comandos Jasypt ahora viene con un script para hacer esto llamado listAlgorithms.bat para windows y listAlgorithms.sh para Linux.

Puede encontrar instrucciones sobre cómo descargarlo y usarlo aquí: http://www.jasypt.org/cli.html#Listing_algorithms


Probé el código publicado por @Qwerky, pero no es muy útil. Agregué el último proveedor de BouncyCastle, y los resultados que obtuve fueron muy confusos. Esto muestra con mayor detalle quién es el proveedor, la versión y el tipo y nombre del algoritmo.

for (Provider provider : Security.getProviders()) { System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion()); for (Provider.Service service : provider.getServices()) { System.out.printf(" Type : %-30s Algorithm: %-30s/n", service.getType(), service.getAlgorithm()); } }



Todavía hay una pregunta ''pendiente'' formulada por Qwerky: ¿por qué utilizar Jasypt en lugar de usar javax.crypto?

Bueno, recomendaría usar Jasypt, ya que es una forma sencilla de cifrado para principiantes y altamente configurable para usuarios experimentados.

Con Jasypt, puede comenzar a aprovechar rápidamente javax.crypto con un poco de conocimiento de JCE y la criptografía. Si desea administrar contraseñas de usuario o cifrar / descifrar datos, el marco proporciona una simple abstracción de la pregunta.

Al mismo tiempo, el marco expone todas las posibilidades de la especificación JCE para permitir a los usuarios experimentados tener el control total.

Además de esto, Jasypt ofrece muchas más funciones listas para usar para preguntas bien conocidas (manejo de datos confidenciales almacenados en la base de datos, ...)