Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 2014
-
17 févr. 2008 à 02:56
cs_pf68
Messages postés1Date d'inscriptionmardi 18 septembre 2007StatutMembreDerniè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.
cs_pf68
Messages postés1Date d'inscriptionmardi 18 septembre 2007StatutMembreDerniè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és15Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention24 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és173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 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és230Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 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és653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 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'...
1 mars 2008 à 13:12
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...
24 févr. 2008 à 16:39
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 ;)
18 févr. 2008 à 19:54
18 févr. 2008 à 13:58
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)
17 févr. 2008 à 12:18
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
17 févr. 2008 à 11:14
"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
17 févr. 2008 à 02:56
Et puis ya un gros pbs:
- 'aaa' donne le meme 'hash' que 'bbb' ou 'ccc'...
Neo_Fr