Días atrás twitter puso en alerta a algunos usuarios para que cambien las passwords porque estaban siendo victimas de prishing. Pasa y pasa que muchos developers hacen herramientas open source, como por ejemplo foros open source PHP los cuales tienen exploits. Trackean sus instalaciones y cuando el foro se hace un poco popular ingresan con un master password (por ejemplo) y se roban todas las passwords y emails. Este es el típico caso donde te chorean la password. Viste que facil es que sepan tu password ? Bueno, ahora perfectamente saben que no deben poner la misma password para todos los sites.
Ahora, es muy molesto estar acordandose passwords y demas, para eso, hoy les acerco una tecnica para aquellos Java Boys que quieran tener un poco de complicacion en sus vidas.
La técnica se basa en 1 password master y un 1 string random que puede perfectamente ser el nombre del servicio.
Por ejemplo, yo elijo como password master “rodrigo” y por ejemplo el servicio de email de yahoo es simplemente “yahoo”. Entonces tenemos “rodrigo”+”yahoo”, en el caso de gmail seria, “rodrigo” +”google” and so on.
Ahora, como combinar estas palabras para generar una password ? Usamos un algoritmo MD5 bien casero en Java. El código.
public class MD5Generator() {
private MessageDigest messageDigest;
private MessageDigest getMessageDigestMD5() throws NoSuchAlgorithmException {
if (this.messageDigest == null) {
this.messageDigest = MessageDigest.getInstance("MD5");
}
return this.messageDigest;
}
public String generate(String key) throws Exception {
// start fresh
this.getMessageDigestMD5().reset();
this.getMessageDigestMD5().update(key.getBytes());
byte[] bytes = this.getMessageDigestMD5().digest();
// buffer to write the md5 hash to
StringBuffer buff = new StringBuffer();
for (int l = 0; l < bytes.length; l++) {
String hx = Integer.toHexString(0xFF & bytes[l]);
// make sure the hex string is correct if 1 character
if (hx.length() == 1) buff.append("0");
buff.append(hx);
}
return buff.toString().trim();
}
}
Ahora, el uso seria algo asi:
String master = "rodrigo";
String service = "yahoo";
String longMD5 = new MD5Generator().generate(master+service);
La variable longMD5 va a ser un choclo como esto: “37b0227d88adcf07ddb469fa45ad2938″ per pueden hacer un substring para acortarla a por ejemplo 8 caracteres.
String pass = new MD5Generator().generate(master+service).substring(0,8);
Que lo disfruten.