EKINOX - ALGORYTHME DE HASH

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 17 févr. 2008 à 02:56
cs_pf68 Messages postés 1 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 1 mars 2008 - 1 mars 2008 à 13:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45767-ekinox-algorythme-de-hash

cs_pf68 Messages postés 1 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 1 mars 2008
1 mars 2008 à 13:12
pour ton pb de segmentation, c'est ici:
char ac[2];
for (i = 0; i < 3; i++)
ac[i] = *(p_clear+3*n+i);

essaie avec char ac[3], ca ira tout de suite mieux! c'est meme etonnant que ca ne pete pas systematiquement...
cs_Gwaihir Messages postés 15 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 24 février 2008
24 févr. 2008 à 16:39
c'était justement pour m'appercevoir de ces problemes que j'ai posté ce code.

Quand a Vecchio, s'il avait lu mon explication, il aurait vu que le +33 et le %94 permettent d'avoir des codes ascii comprit entre 33 et 126, c'est a dire des caracteres qui s'affichent sans trop de probleme ;).

je vais essayer d'améliorer sa, merci de vos commentaires ;)
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
18 févr. 2008 à 19:54
Vecchio: le challenge des algos de hash, c'est justement de pouvoir donner une signature avec un risque de collision le plus faible possible. (MD5 s'en sort plutôt bien, par exemple, mais celui il y a collision dès quun bloc de 3 caractere est l'anagramme d'un autre.. pas top).
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
18 févr. 2008 à 13:58
k = (c1 ^ c2) * c3;

si ton bloc est "abc" ou "bac" le résultat sera le même. Donc non, tu n'as pas une solution unique pour tous les cas (alors que tu pourrais techniquement l'avoir bloc par bloc).

Ensuite, pourquoi ne pas simplement convertir la valeur de k en une chaine hexadécimale, au lieu de faire le modulo/+33 ? C'est ce qu'on utilise, généralement, et ca te permet de conserver la valeur entière (qui est plus rapide à comparer qu'une chaine) et de travailler avec de plus grands blocs.

Pour aller plus loin, tu pourrais hasher les blocs résultants jusqu'à n'en obtenir qu'un certain nombre (et donc avoir une longueur fixe, comme l'a mentionné neo_fr)
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
17 févr. 2008 à 12:18
k = (ac[0]^ac[1])*ac[2];
k = k % 94;
k = k + 33;
le mod 94 et l'addition c'est pour que k ne contienne pas de caracteres speciaux, ce qui est totalement inutile, il suffisait de convertir la sortie en hexa..

Neo_Fr
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 févr. 2008 à 11:14
Quand on propose un algo, la moindre des choses c'est qu'il puisse être réutilisable, il serait donc utile de le mettre dans une fonction, plutot que de livrer le tout dans ton main

"je n'ai pas encore chercher a verifier si chaque signature est unique"
Je ne m'y connais pas trop, mais je ne vois pas comment chaque signature pourrait être unique, vu que l'ensemble de départ des chaines possibles est infini et l'ensemble d'arrivé est fini.

A part ça, tu n'explique pas du tout d'où sortent tes valeur 94, 33, ... En gros tu as fait ça au pif, non?

Autre détail : on écrit algorithme, pas algorythme
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
17 févr. 2008 à 02:56
On peut pas variment dire que se soit un algo de hash etant donné que celui ci ne donne pas une sortie de taille fixe..
Et puis ya un gros pbs:
- 'aaa' donne le meme 'hash' que 'bbb' ou 'ccc'...

Neo_Fr
Rejoignez-nous