La función hash PJW es una función hash no criptográfica creada por Peter J. Weinberger de AT&T Bell Labs.
Otras versiones
Se ha utilizado una variante del hash PJW para crear el hash ElfHash o Elf64 que se utiliza en archivos de objetos Unix con formato ELF .
Allen Holub ha creado una versión portátil del algoritmo hash PJW que tenía un error y terminó en varios libros de texto, como más tarde admitió el autor de uno de estos libros de texto. [1]
Algoritmo
El algoritmo hash PJW implica cambiar el hash anterior y agregar el byte actual seguido de mover los bits altos: [2]
El algoritmo PJW_hash(s) es
unidad h := 0
bits := uint tamaño en bits
para i := 1 a |S| hacer
h := h << bits/8 + s[i]
alto := obtener los bits superiores/8 bits de h desde la izquierda
Si alto ≠ 0 entonces
h := h xor (alto >> bits * 3/4)
h := h & ~alto
volver h
Implementación
A continuación se muestra la implementación del algoritmo utilizado en formato ELF de Unix: [3]
unsigned long ElfHash ( const unsigned char * s ) { unsigned long h = 0 , alto ; mientras ( * s ) { h = ( h << 4 ) + * s ++ ; si ( alto = h & 0xF0000000 ) h ^= alto >> 24 ; h &= ~ alto ; } devolver h ; }
Este código C asume incorrectamente que longse trata de un tipo de datos de 32 bits. Cuando longes más amplio que 32 bits, como ocurre en muchos sistemas de 64 bits , el código contiene un error. [4]
Véase también
Funciones hash no criptográficas
Referencias
- ^ Binstock, Andrew (1996). "Rehashed de Hashing". Dr. Dobb's .
- ^ "Funciones hash". www.cs.hmc.edu . Consultado el 10 de junio de 2015 .
- ^ CORPORATE UNIX Press (1993). Interfaz binaria de aplicación del sistema V. ISBN 0-13-100439-5.
- ^ "La función hash ELF puede desbordarse". 12 de abril de 2023. Consultado el 14 de abril de 2023 .