¿Qué es un Hash?
En informática, Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo.
¿Qué es SHA-1?
La familia SHA (Secure Hash Algorithm, Algoritmo de Hash Seguro) es un sistema de funciones hash criptográficas relacionadas de la Agencia de Seguridad Nacional de los Estados Unidos y publicadas por el National Institute of Standards and Technology (NIST). El primer miembro de la familia fue publicado en 1993 es oficialmente llamado SHA. Sin embargo, hoy día, no oficialmente se le llama SHA-0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor de SHA fue publicado con el nombre de SHA-1.
La codificación hash vacía para SHA-1 corresponde a:
SHA1("") = da39a3ee5e6b4b0d3255bfef95601890afd80709Visto todo lo anterior, les presento la siguiente Clase que genera el hash SHA-1 de una cadena o texto cualquiera:
// SHA1.java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA1 {
private MessageDigest md;
private byte[] buffer, digest;
private String hash = "";
public String getHash(String message) throws NoSuchAlgorithmException {
buffer = message.getBytes();
md = MessageDigest.getInstance("SHA1");
md.update(buffer);
digest = md.digest();
for(byte aux : digest) {
int b = aux & 0xff;
if (Integer.toHexString(b).length() == 1) hash += "0";
hash += Integer.toHexString(b);
}
return hash;
}
}Su uso es muy simple, creamos una instancia de la clase SHA1 y utilizamos su método getHash (dentro de un bloque try-catch), pasándole como parámetro un String ...aquí un ejemplo:
// Demo.java
import java.security.NoSuchAlgorithmException;
public class Demo {
public static void main (String[] args) {
SHA1 s = new SHA1();
String msg = "debug_mode=ON";
try {
System.out.println("El hash SHA-1 de \""+msg+"\" es: "+ s.getHash(msg));
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}...la ejecución de Demo nos imprimiría lo siguiente:
El hash SHA-1 de "debug_mode=ON" es: a3e092760f274530a032fffecc6917905af316f5
Notas:
Blogger en Tecnolack: http://www.tecnolack.com
gimenete escribió
hace 9 meses
© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |
#1
Hola!
Tengo alguna sugerencia.
Finalmente así quedaría el método:
public static String hexDigest(String message) { MessageDigest md; byte[] buffer, digest; String hash = ""; try { buffer = message.getBytes("UTF-8"); md = MessageDigest.getInstance("SHA1"); } catch (Exception e) { throw new RuntimeException(e); } md.update(buffer); digest = md.digest(); for(byte aux : digest) { int b = aux & 0xff; String s = Integer.toHexString(b); if (s.length() == 1) hash += "0"; hash += s; } return hash; }No obstante se podría hacer una optimización: se sabe que siempre el resultado va a ser una cadena de 40 caracteres. Se podría usar un char[40] en vez de ir concatenando cadenas.
¡Un saludo!