|
Cette fonction est basée sur un générateur de nombres pseudo-aléatoires dit à congruence linéaire. C'est l'algorithme utilisé pour la fonction rand( ) de la librairie standard de C. On y ajoute une étape pour combiner les données de la clef au générateur, et nous obtenons cette fonction. inline unsigned HashLinearCongruential(const unsigned char *buffer, int size) { unsigned h = 0; for (int i=0; i<size; i++) h = ( h * 1103515245u ) + 12345u + buffer[i]; return h; } Cette fonction est assez bonne car le générateur de nombres pseudo-aléatoires qu'on y retrouve est aussi « assez bon ». Ce type de générateur est toutefois considéré comme étant « faible » par les experts en génération de nombres pseudo-aléatoires et très certainement insuffisant pour toute application de type cryptographique. |