Con esta entrada, os voy a enseñar cómo utilizar jBCrypt en Java. jBCrypt es una implementación de OpenBSD BlowFish (el cual también pondré cómo usar en otra entrada aparte), principalmente coge un String y lo encripta con un generador de claves.
Lo curioso es que solamente podremos encriptar un String, pero no al revés. Vosotros diréis pues es absurdo, pues no necesariamente, aquí un ejemplo:
1) Pedimos a un cliente un usuario y una contraseña. Nos da por ejemplo usuario10 y pass10.
2) Nosotros lo encriptamos usando jBCrypt, nos dará una String o un array de Bytes según usemos una función u otra.
3) La guardamos en un fichero, una tabla en una Base de Datos, donde sea, pero la guardamos.
4) La próxima vez que ese usuario vaya a entrar al Sistema o a donde tenga que entrar, nosotros le pediremos usuario y contraseña. Ahora viene la gracia, comparamos lo que nos da el usuario con lo que tenemos guardado en nuestro fichero o base de datos. Si coincide, pues que siga. Si no coincide, más memoria para la próxima :)
Lo primero que tendremos que hacer es bajarnos el fichero jBCrypt.java que lo podréis encontrar aquí.
Una vez lo descargamos, se descomprime y se importa el fichero mencionado anteriormente. Para importar ese Java en nuestro proyecto, por ejemplo, con Eclipse, basta con arrastrarlo hasta el paquete que queramos o al src si queremos e indicar que es una copia y no un linkeo. En la siguiente imagen os podéis hacer una idea de cómo se debería de quedar. En mi caso lo meto en un paquete llamado encrypts.
Ahora vamos a encriptar por ejemplo dos Strings cualquiera.
Creamos una clase por ejemplo Encriptar(){} y la vamos a hacer principal, total es para probar, pero ya sabéis que esto lo suyo sería ponerlo en un paquete distinto con una clase distinta.
Quedaría más o menos de la siguiente manera:
public class Encriptar { //lo ponemos manualmente para probar private String usuario="paco", password="estoesseguro";
public static void main(String[] args) { //vamos a crear un archivo, donde ira usuario y password encriptado try{ FileWriter fw = new FileWriter(new File("C:/Ejemplo"+".java"+".bin"),); PrintWriter pw = new PrintWriter(fw); String usuario= BCrypt.hashpw(usuario, BCrypt.gensalt()); String password = BCrypt.hashpw(password, BCrypt.gensalt()); pw.println(usuario); pw.println(password); pw.close(); } catch(IOException ex) System.out.println("Error al crear fichero"); System.out.println("Fichero creado correctamente"); }
}
Ahora solo faltaría ver como comprobarlo. Otra clase Comprobar() o en la misma de antes...
File archivo = "C:/Ejemplo/java.bin"; String checkusuario=null, checkpass=null; int cont=0; try{ FileReader fr = new FileReader(archivo); BufferedReader br = new BufferedReader(fr); linea = br.readLine(); while(linea!=null){ try{ if (cont%2==0) if (BCrypt.checkpw(checkusuario, linea)) Acceso=true; if (cont%2==1) if (BCrypt.checkpw(checkpass, linea)) Acceso2=true; } catch(NullPointerException e){} linea=br.readLine(); cont++; if (Acceso && Acceso2) break; } // FIN WHILE br.close(); //CERRAR FICHERO //AQUI VAN LAS EXCEPCIONES