¿Función hash simple (no segura) para JavaScript?
Posible duplicado:
Generar un hash a partir de una cadena en Javascript/jQuery
¿Alguien puede sugerir una función hash simple (es decir, decenas de líneas de código, no cientos de líneas) escrita en JavaScript compatible con el navegador? Idealmente, me gustaría algo que, cuando se le pase una cadena como entrada, genere algo similar a la cadena hexadecimal de 32 caracteres, que es la salida típica de MD5, SHA1, etc. No tiene que ser criptográficamente segura, solo razonablemente resistente a colisiones. (Mi caso de uso inicial son las URLs, pero probablemente querré usarla en otras cadenas en el futuro.)
Respuesta #1
No verifiqué esto yo mismo, pero puedes mirar esta implementación en JavaScript del método String.hashCode() de Java. Parece razonablemente corta.
Se ha aceptado durante mucho tiempo que modificar los prototipos incorporados es una mala práctica, así que use una función sencilla como esta:
/**
* Returns a hash code from a string
* @param {String} str The string to hash.
* @return {Number} A 32bit integer
* @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
*/
function hashCode(str) {
let hash = 0;
for (let i = 0, len = str.length; i < len; i++) {
let chr = str.charCodeAt(i);
hash = (hash << 5) - hash + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
}
Respuesta #2
Existen muchas implementaciones de funciones hash escritas en JS. Por ejemplo:
- SHA-1: http://www.webtoolkit.info/javascript-sha1.html
- SHA-256: http://www.webtoolkit.info/javascript-sha256.html
- MD5: http://www.webtoolkit.info/javascript-md5.html
Si no necesitas seguridad, también puedes usar base64, que no es una función hash, no tiene una salida fija y podría ser simplemente decodificada por el usuario, pero parece más ligero y podría usarse para ocultar valores: http://www.webtoolkit.info/javascript-base64.html
