Code assez simple si le Pchar pour la String gene faites :
HashName(PChar(VariableDeTypeString)); pour lancer le Hash
Y'a pas de limitation de taille de la chaine...
Source / Exemple :
Function HashName(aString: PChar): Integer;
asm
mov ecx,eax
xor eax,eax
@loop:
mov dl,[ecx]
test dl,dl
jz @Out
rol eax,5
xor al,dl
inc ecx
jmp @loop
@Out:
End;
Conclusion :
En fait il utilise le XOR pour que chaque caractere influence le hash. Et il decale la valeur de 5 bit a chaque caractere injecté. En utilisant le rol, le decalage fait réentrer les bits qui sortent a gauche, à droite, s'assurent ainsi que chaque caractere garde son influence sur le hash final.
Le plus simple des hashcode consiste en un XOR de tous les caractere. Mais dans ce cas là, on obtiendrait que 256 clefs differentes ce qui est trop faible. Alors on a rajouté le decalage pour couvrir autant de bits que possible. Ce qui donne un hash sur 32bits, soit 4MM de solutions, c beaucoup mieux :)
PS: le rol 5 en pascal ca fait un truc du genre A:=((A and _F8000000) shr 27) or ((A and _07FFFFFF) shl 5);
code de Bkg2k :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.