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.

Categories: java

Rodrigo Asensio

Apasionado por la tecnología

Leave a Reply

Your email address will not be published. Required fields are marked *