Qu'est-ce qu'un bon algorithme de hachage pour l'ensemencement d'une PRNG avec une chaîne?

StackOverflow https://stackoverflow.com/questions/678013

  •  21-08-2019
  •  | 
  •  

Question

Je cherche un algorithme de hachage qui produit un entier bit 31/32 signé / non signé comme un condensé pour une chaîne UTF8 dans le but d'utiliser la sortie pour l'ensemencement d'un PRNG, comme un parc-Miller-Carta LCG ou un Mersenne-Twister.

Je l'ai regardé dans FNV1 et FNV1a, mais ils fournissent des valeurs très proches des chaînes similaires qui diffèrent dans leur dernier caractère; Je voudrais avoir un hachage faible collision qui change radicalement sur des modifications minimes sur la chaîne d'entrée. Elles ne sont pas un problème.

Mon approche actuelle consiste en une LCG sale qui utilise des codes de caractères et un nombre premier en tant que multiplicateurs:

a = 524287;
for ( i = 0; i < n; i ++ )
a = ( a * string.charCodeAt ( i ) * 16807 + 524287 ) % 2147483647;

S'il vous plaît laissez-moi savoir de toutes les meilleures alternatives.

Était-ce utile?

La solution

Si vous générer de la valeur 32 bits, pensez à utiliser CRC32 classique. FNV est suposed à être une alternative rapide à CRC, et vous dites, que les performances ne sont pas un problème.

Autres conseils

Utilisez SHA-2

Il est le meilleur / dernier algorithme de hachage là-bas. Il est toujours conseillé d'aller avec des algorithmes standards.

Tout hachage cryptographiquement forte aura les propriétés que vous voulez, mais générer plus de bits, mais troncature simple du résultat à 32 bits serait bien. Je suppose que la force cryptographique n'est pas une exigence réelle de sorte que entachées d'irrégularités (mais largement utilisé) comme les systèmes de hachage MD5 seraient suffisantes -. Et facilement disponibles dans de nombreuses bibliothèques

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top