Hash

Necesito diseñar una función de Hash a mano. Básicamente necesito una función que reciba un String (pueder ser alfanumérico), y me devuelva un long entre 0 y 6499991.
Tengo que diseñar todo mano y no utilizar las funciones de Hash que el SDK me provee.
¿Se te ocurre algo?
Respuesta
1
Para hacer una función de Hash necesitas saber sobre algoritmos. Mientras más sepas mejor. Todo algoritmo (hash, compresión, cifrado, etc.) es una función que recibe ciertos parámetros (como mínimo el mensaje o string a procesar, aunque también puede recibir llaves, passwords, etc.) y los procesa y da un resultado. Así de fácil y simple es. Se pueden crear algoritmos propios. Cualquiera (con los conocimientos mínimos) puede hacer uno, pero lo mejor es utilizar estándares. Los algoritmos estándares están comprobados (científica y matemáticamente) de ser mejores y más seguros. Obviamente estos algoritmos no son tan simples, ya que para crearlos (no para implementarlos) se necesita saber mucho de matemática y criptoanalisis.
La manera más fácil es buscar documentación (recordemos que son estándares conocidos públicamente) que explique como funcionan. Para eso visita las sig. páginas que incluyen una gran variedad, aunque obviamente podes hacer los tuyos propios:
1) http://fismat.umich.mx/~emurguia/mipagina/tesis/node29.html
2) Para ver los RFC usa esta pagina:
http://www.ietf.org/rfc.html
3) Esta funcion no es standar, pero esta muy buena:
http://caminantes.metropoliglobal.com/web/informatica/algoritmos/algor4-1.htm
4) Con codigo en java:
http://dada.perl.it/shootout/hash.java.html
5) http://www.secure-hash-algorithm-md5-sha-1.co.uk/
6) http://www.faqs.org/rfcs/rfc3174.html
Espero te sirva de ayuda, y no te olvides de ponerle puntaje a la respuesta.

3 respuestas más de otros expertos

Respuesta
1
Pues mira te mando una funcioncita que recibe como argumentos un String y la longitud de la tabla, es decir, en tu caso 6499991, y te devuelve el código hash.
public int hash(String key, int tableSize) {
int hashValue = 0;
int index = 0;
while (index < key.length()) {
hashValue = (hashValue<<1) ^ key.charAt(index);
index++;
}
return hashValue & tableSize;
}
Respuesta
1
Pues una función hash es por ejemplo sumar el código ascii de todos sus caracteres y hacer el modulo con 6499991, así te aseguras que funcione
Respuesta
Utiliza la api de IAIK que provee extensiones de la api de java, por decirte alguna, la iaik. Security. Rsa
web: http://jce.iaik.tugraz.at/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas