¿Cuáles son algunas formas simples de hash de un entero de 32 bits (por ejemplo, dirección IP, por ejemplo, Unix time_t, etc.) hasta un número entero de 16 bits?Hash 32bit int a 16bit int?
E.g. hash_32b_to_16b(0x12345678)
podría devolver 0xABCD
.
Vamos a empezar con esto como una solución horrible ejemplo pero funcional:
function hash_32b_to_16b(val32b) {
return val32b % 0xffff;
}
pregunta es específicamente acerca de JavaScript, pero no dude en añadir cualquier soluciones independientes del idioma, preferentemente sin utilizar funciones de biblioteca.
El contexto para esta pregunta es generar ID únicos (por ejemplo, un ID de 64 bits puede estar compuesto por varios valores hash de 16 bits de varios valores de 32 bits). Evitar colisiones es importante.
Simple = bueno. Wacky + ofuscado = divertido.
XOR los 2 bytes altos con los 2 bytes bajos? 0x1234 XOR 0x5678. Pero no puede etiquetar la pregunta con 'criptografía' y pedir algo como esto ... –
@Remus: ¿Por qué no puedo etiquetarlo como 'criptografía'?¿No es esta una pregunta destilada y extremadamente simple relacionada con la criptografía? PD ¿Por qué no publicar tu comentario como respuesta? – dkamins
Para el punto de Remus, estoy de acuerdo en que esto no se trata de criptografía. Si estoy pensando en este derecho, su hash de 16 bits se correlacionará con uno de dos enteros de 32 bits. Tengo curiosidad sobre el problema particular que estás tratando de resolver, y espero que no tenga nada que ver con la seguridad. –