Tema: Seguridad
Pregunta: Algun algoritmo para encriptar passwords??
Respuesta: Existen varios algoritmos para encriptar passwords o algun otro texto, el siguiente codigo es el
Blowfish, con este podemos encriptar y desencriptar passwords, es muy rapido y seguro unicamente especificamos una KEY, para encriptar, y para desencriptar usamos la misma KEY con la que encriptamos.
Código PHP:
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.spec.*;
import java.io.*;
public class Blowfish {
public static String encriptar(String cleartext, String key)
throws Exception {
return crypt(cleartext, key, Cipher.ENCRYPT_MODE);
}
public static String desEncriptar(String ciphertext, String key)
throws Exception {
return crypt(ciphertext, key, Cipher.DECRYPT_MODE);
}
private static String crypt(String input, String key, int mode)
throws Exception {
// Install SunJCE provider
Provider sunJce = new com.sun.crypto.provider.SunJCE();
Security.addProvider(sunJce);
KeyGenerator kgen = KeyGenerator.getInstance("Blowfish");
kgen.init(448);
SecretKey skey = kgen.generateKey();
byte[] raw = key.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
cipher.init(mode, skeySpec);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes());
CipherOutputStream cos = new CipherOutputStream(bos, cipher);
int length = 0;
byte[] buffer = new byte[8192];
while ((length = bis.read(buffer)) != -1) {
cos.write(buffer, 0, length);
}
bis.close();
cos.close();
return bos.toString();
}
}
Para usarlo unicamente necesitas importar la clase (si esta dentro de un paquete) o poner el archivo en el mismo directorio que tu aplicacion, no necesitas intanciar la clase, pues es STATIC, entonces unicamente harias esto:
String txtEncriptado = Blowfish.encriptar("mipassword","estaeslallave");