ALGORITHME DE HASH LEA

djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009 - 24 mai 2009 à 16:53
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 6 août 2009 à 23:23
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/50065-algorithme-de-hash-lea

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 août 2009 à 23:23
Vite fait, une amélioration des performances. Du côté mathématique ça ne change absolument rien, mais plutôt que de concentrer la fonction F cryptographique en une seule fonction, on la sépare en quatre fonctions E, F, G et H. Ca permet d'éviter 256 "case..of" par bloc ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 août 2009 à 18:20
Attention : la dernière modification (j'espère). Voici ce qu'elle apporte :

- un nouveau logo (lol)
- une modification des fonctions HashCrypt et HashUncrypt : elles travaillent à présent directement sur l'objet THash et non pas sur sa représentation en chaîne. C'est plus rapide et plus efficace (la clef peut être n'importe-quoi, car on calcule son hash, puis on additionne les deux hashs pour crypter et on soustrait pour décrypter). Au fait, dans la dernière version de ces fonctions, un bug s'est glissé ...
- petite erreur au niveau de l'algorithme (l'avant-avant-dernier double-mot du hash (Hash[$D]) était constant dû à une petite erreur d'inattention.

Pour ceux que ça intéresse, les caractéristiques cryptographiques de l'algorithme (certaines) :

- blocs de 512 bits
- 16 rondes par bloc
- une fonction F, qui est appellée 256 fois par bloc, qui prend en paramètre quatre entiers, ainsi qu'une valeur entre 1 et 4, et qui retourne un seul entier. Elle effectue quatre types d'opérations différentes (selon la valeur du dernier paramètre), en utilisant les quatres premiers paramètres).
- une "expansion" de chaque entier du bloc : en effet, pour chaque ronde - donc pour chaque entier 32 bits du bloc en cours, on sépare les quatre octets de cet entier, puis on associe à chaque octet une valeur sur 32 bits (voir tableau HashTable). Cela permet de créer un effet d'avalanche intéressant du point de vue mathématique.
- une recalculation des tableaux en constante (HashInit et HashTable), à partir de nombres premiers. En effet :
* le tableau HashInit est basé sur le calcul suivant : prenons un grand nombre premier ($96438AF7 pour ce tableau). Imaginons un tableau Prime, de 16 éléments (0..15), contenant les 16 premiers nombres premiers (en partant de 2 inclus). Alors on a le calcul suivant :
HashInit[0] = $96438AF7 * Primes[0];
pour I 1 à 15 faire HashInit[I] ($96438AF7 * Primes[I]) + ($96438AF7 mod Primes[I]);

* pour le tableau HashTable, c'est la même chose, sauf qu'on se base sur le nombre premier $1C8CFBFF, et que les tableaux HashTable et Prime contiennent 256 éléments.

- lors des 16 rondes de chaque bloc, les seize entiers du hash sont mélangés dans tous les sens, je ne saurais vous décrire ce qu'ils doivent endurer à chaque ronde :'( .... lol
______________________

Et voilà, je pense que c'est fini, sauf si l'on trouve des bugs ;-)
Bonne chance pour étudier ça, Djmmix, le coup de l'expansion du bloc est plus que pénible à cryptanalyser ... ;-)

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 août 2009 à 12:22
De rien, content que ça te plaise. Je veux être cryptologue plus tard et j'ai fait cet algorithme avec mes compétences de lycéen ( :'/ ) en ayant lu plein de cours sur la cryptologie.

Cordialement, Bacterius !
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
3 août 2009 à 12:06
salut Bacterius,

je vais étudié sa de près :)

merci pour tout tes éfforts pour cet algo :)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
2 août 2009 à 21:29
Modification importante, changement total de l'algorithme. En effet, j'ai trop négligé l'aspect "bits" en me penchant trop sur l'aspect "octet". Bref, un effet d'avalanche totalement raté, voire des collisions à la demande. C'est normalement corrigé, et j'ai repassé tous les tests. J'espère bien que c'est fini ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 juil. 2009 à 14:32
Bon alors encore du nouveau : la table de hashage refait son apparition :D
En effet après une petite analyse, j'ai remarqué que les hashages ne changeaient pas beaucoup dans certaines conditions, donc j'ai réintroduit les tables de hashage (associées à un nouveau concept ...). Je pense qu'il s'agira de la dernière modification de l'algorithme en lui-même ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
19 juil. 2009 à 03:18
Enorme mise à jour (voir dernière partie de la description). En revanche, je n'ai pas mis à jour la doc. (trop de boulot, faut tout refaire quoi, puisque le concept change radicalement).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 juil. 2009 à 20:33
Encore des nouveautés, à présent l'on a un Callback, qui est appelé à chaque bloc du message traité ! (Cependant pensez à ne traiter que quelques callbacks, sinon le traitement prendra un temps fou : j'opte pour ma part pour un traitement de 1 callback sur 32768).
De plus, l'algorithme a été renforcé cryptographiquement parlant : effectivement, la version précédente resistait difficilement à une attaque par préimage, d'après certains tests concluants). Pour finir, les documentations ont totalement été remises à jour, et la table de hashage (contenant les 64 valeurs) n'existe plus, devenant totalement obsolète avec cette nouvelle version.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
12 juil. 2009 à 18:07
Attention attention : mise à jour de l'algorithme. Désormais, il travaille sur des blocs de 512 bits. Ainsi l'on introduit une nouvelle notion : le "padding" ou remplissage. De la même façon que la plupart des fonctions de hash, l'on adapte la taille de la donnée en ajoutant à la fin un bit à 1 (donc un octet de valeur 128), puis en ajoutant autant de bits à 0 qu'il faut pour obtenir une taille multiple de 512 bits. J'ai également changé la table de hashage pour la rendre compatible avec le nouvel algorithme qui est totalement différent, donc j'ai aussi changé le polynome. Pas de bugs connus.
Une autre nouveauté : les fonctions de cryptage/décryptage des hashages sont mises à jour : à présent ce n'est plus une clef polynumérique mais une clef binaire (par exemple, si le premier bit est à 1, le premier caractère du hash est incrémenté, sinon il est décrémenté). Le cryptage des hashs permet de les envoyer sur un canal non sécurisé (cependant il faut se mettre d'accord sur la clef sur un canal sécurisé au préalable).

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
17 juin 2009 à 09:00
Je veux dire Exellent Amélioration bravo !!
Debiars Junior
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 juin 2009 à 16:48
Bon, nouvelle mise à jour : ajout d'une fonction qui compare deux zones mémoire (c'est rapide et efficace, car il effectue le hash des deux zones mémoire et compare ces derniers), cela peut être pratique pour comparer rapidement deux tableaux de données par exemple. Et une documentation complète de l'algorithme, uniquement en anglais pour l'instant (la version française viendra un peu plus tard).

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 17:02
ta raison ADMIN
DeBiars JUNIOR
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 juin 2009 à 17:00
@Debiars87:
La critique (constructive) sous-entend un minimum de connaissance et de compréhension du sujet et du code ...
à bon entendeur ...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 17:00
Contador lol
Il sort souvent celui-là ^^

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:59
Un exemple à suivre et à imiter dans la façon à programmer
Hein CONTADOR !!

DEBIARS JUNIOR,
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:57
6/10
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 juin 2009 à 16:45
hou là là c'est chaud..
En tous cas, même si le résultat n'est peut-être pas celui attendu par certains on peut féliciter Bacterius pour son opiniatreté sachant aussi resté à l'écoute des autres.

un exemple à suivre..

cantador
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 16:42
Non mais développe tes arguments ! Je suis désolé mais pour l'instant je ne comprends pas très bien pourquoi tu viens critiquer ... tu me renvoies sur une source traitant de brute-force. Très bien ... je pense que tu as quelque chose à reprocher à mon brute-force : je te le concède, il n'est pas terrible. Mais sois explicite ! Tu ne développes aucune de tes remarques ... je ne suis pas devin encore une fois !

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:37
Excuse moi pour le dérangement alors..
Merci pour ton attention
à bientôt
Debiars Junior
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 16:30
Je ne me suis pas penché sur le brute-force, mon cher. L'intérêt principal de la source était ... l'algorithme. Je ne sais pas si tu as remarqué mais on est pas en MD5 là ...

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:27
Meme si tu n'aime le C++ je te conseil vivement de jetter un coup d'oeil la dessus
www.cppfrance.com/codes/ALGORITHME-FORCE-BRUTE-HASH-MD5_44190.aspx
Very simple Bacterius
Tu va vite accepter ma note je veux dire 6/10
franchement du n'importe quoi
DEBIARS JUNIOR
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 16:18
Hmm ... j'ai écrit mon message avant de voir ton 2eme commentaire. Vivement une actualisation automatique ...
Les mauvaises notes je m'en fiche, mais je préfère (comme tout le monde) en avoir des bonnes, et ce que je préfère avant tout c'est que les gens justifient leur note ...

Cordialement, Bacterius !

PS : je ne fais pas dans le web-designing, je ne suis pas un admin, je ne peux rien faire pour ta note. Mais ça sera peut-être rectifié si un admin passe par là.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 16:16
Ok cher Debiars87, ici on est pas là pour faire que nos codes soient utilisés partout, on est ici pour apprendre. Alors j'ai mis un maximum d'exemples et de commentaires pour bien détailler ce que j'ai fait, pour que vous compreniez mon raisonnement. Et puis si tu as trouvé mieux, très bien, alors va le télécharger et ne regarde même pas mon code ;) ça n'en vaut pas la peine n'est-ce pas ? Et puis tant qu'à faire, allez, pour l'em...bêter, autant mettre une sale note :D
Ah bravo ...

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:15
Mais je trouve ça un bonne tentative
Ah pardon pour la note!!
je crois que je suis tromper de touche je voulais mettre 6/10
Je sais que tu n'aime pas les mauvaises notes lol
alors aider moi à rectifier la note avec tes connaissances avec Les ADMINS
hhhh
Debiars Junior,
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 16:10
Ok cher Bactérius
Trop de code pour une application simple
parceque j'ai trouvé mieux sur internet dans le plus grand site de code source
"Source FORGE " excuser moi pour la PUB
à bientot
Debiars Junior,
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 16:01
Ah en passant, merci pour la note, ça fait plaisir ;) Tu t'es jamais demandé pourquoi, au bac, les professeurs sont tenus de justifier un 0 ou un 20 ? Justifie la note que tu as attribuée à ma source, mais de façon claire et ordonnée merci. Je suis pas dans ta tête.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 juin 2009 à 15:58
Pardon ? Explique-toi Debiars87 ... qu'entends-tu par "rien du tout" ? J'ai bossé sur ce projet, alors explique-toi merci.

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
15 juin 2009 à 15:55
Trop d'explication pour rien detout !!
Donc un peu de réalisme Bacterius !!
Debiars87
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
7 juin 2009 à 19:27
Ouais.
Mais c'est tout de même étrange que les chaînes '1234' et '1200' (en unicode) soient équivalentes (en ascii) ...

Cordialement, Bacterius !
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
7 juin 2009 à 18:05
ha je savais bien que c'était un problème d'unicode :p

merci pour la mise a jour CIREC et Bactérius :)

have you fun
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
7 juin 2009 à 00:18
super!!!
ca marche nikel
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 juin 2009 à 16:48
Tada ! Nouvelle option dans l'exemple n°2, le test de collisions ! J'ai eu cette idée il y a quelques minutes, j'ai donc décidé de la mettre en oeuvre. Elle a pour but de détecter des collisions de hash.
Il part d'un principe fondamental du hash : que pour chaque donnée x, aucune autre donnée ne peut avoir le même hash que la donnée x (en théorie).
On va donc partir d'une chaîne de base (on part de la chaîne nulle par convention), puis on va hasher la représentation textuelle de ce hash. On va alors obtenir un autre hash, qui est normalement unique (puisque le hash de la chaîne nulle est unique). On va répéter l'opération un certain nombre de fois.
Voilà pour la théorie. En pratique, on va faire ça avec une liste de chaînes, à l'aide d'une boucle. On va interdire l'ajout des doublons dans la liste de chaînes. A la fin, on va comparer le nombre de chaînes dans la liste avec le nombre de fois que l'on devait répéter l'opération. On saura alors s'il y avait eu des doublons ou non (en comparant ces deux nombres).
Voilà, c'est très simple et malgré tout très efficace (du point de vue de la méthode : en performance, il y a beaucoup mieux à faire, j'ai fait ça rapidement, il y aura sans doute une amélioration pour la performance).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 juin 2009 à 17:04
Bon voilà Jeffray03, essaye maintenant, ça devrait marcher. Avec la version Unicode, j'obtiens 2 hashs différents pour '1200' et '1234'.
Merci Cirec, j'ai reproduit l'exemple que tu m'as donné, dans les sources mises à jour, comme mesure intermédiaire. Mais je suis d'accord, je pense qu'il doit y avoir un moyen d'éviter 2 transtypages à chaque hash ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 juin 2009 à 16:49
Je vais mettre tout ça à jour. Puisque Cirec a modifié l'exemple Global Example qui n'existe plus, je vais adapter le code de la même façon pour le nouvel exemple. Je m'y mets ... Merci Cirec je me disais bien que c'était un problème d'unicode.

Cordialement, Bacterius !
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
5 juin 2009 à 14:35
Merci, jŽattend.
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 juin 2009 à 14:17
j'ai un code qui fonctionne pour D7 ET D2009
je te l'envoie par mail ... surveilles ta boite ;)

et en effet il faut modifier quelques types:

string > ansistring
PChar > PAnsiChar
Char > AnsiChar

etc. etc. sinon on est en Unicode "WideString"
plus encore quelques conversions explicites pour faire taire les messages du compilateur ^^;

j'ai pas fait dans la finesse ... j'ai modifié tout le code ... mais en prenant un peut de temps et en utilisant les directives de compilations et la nouvelle unité mise à disposition par D2009 "AnsiString.pas" ont peu produire un code plus simple et plus "propre" pour les "toutes" les versions de Delphi

ps: par défaut D2009 est en Unicode.
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
5 juin 2009 à 10:40
salut suite a ta demande, jŽai effectué quelque test:
voici ce que cela donne :
avec delphi 2009:
1234 ==> 734458EE8614FA84139A58B361741A8E
1200 ==> 734458EE8614FA84139A58B361741A8E
avec delphi 7
1234 ==> 523B512BD263691E444B741A78627A42
1200 ==> CC25D7BB10B9F10377EEB059CB64CCFD
je crois kil ya un problem avec le string declaré, je vais essayer de mettre les string en AnsiString.
je crois que cŽest de la que vient le probleme.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 juin 2009 à 09:28
Effectivement cela peut avoir son importance. Mais il est plus qu'improbable qu'un passage en unicode transforme le hash de '1234' en hash de '1200', unicode ou non ... Les chances sont extrêmement minces ... Mais pourquoi pas ?

Cordialement, Bacterius !
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
4 juin 2009 à 18:53
salut bactérius,

je c'est pas si dans delphi 7 l'unicode est implanter mais les string sous delphi 6 son en ascii et sur delphi 2009 il sont en unicode sa a peut-être un impact j'ai développer des application porté de delphi 6 a 2009 il a fallut pour mon code asm faire une amélioration du a sa, je suis pas sur je vais testé sa et je te tien au parfum ^^

pas mal ta mise a jours pour le brute :) de 1m30s a 10 s c'est énorme ^^
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 juin 2009 à 17:46
Bon j'ai remarqué un sérieux problème de codage dans la fonction récursive de brute-force "Search". En effet, l'algorithme de récursivité redémarrait à 0 pour chaque nouvelle longueur, d'où une perte importante de temps. Le nouvel algorithme corrige tout ça (mdp de 3 caractères passe de 1m30 à 10 secondes environ). Mais on peut encore mieux faire ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 juin 2009 à 17:01
Peu importe l'exemple que tu as compilé, c'est le code de l'unité LEA_Hash qui est important.
Je voudrais que tu fasses les démarches suivantes pour essayer de nous aider à comprendre pourquoi le code généré par D7 et D2009 n'est pas le même, car cela nous intéresse autant que ça t'énerve.
Voici ce que je te demande de faire :

1. Compiler (a partir de Delphi 7) et lancer un exemple qui puisse donner le hash d'une suite de caractères.

2. Copier le hash de la chaîne de caractères '1200' sans les guillements dans le bloc-notes. Indiquer sous quel compilateur le hash a été obtenu.

3. Copier le hash de la chaîne de caractères '1234' sans les guillements dans le bloc-notes. Indiquer sous quel compilateur le hash a été obtenu.

4. Copier le hash de la chaîne de caractères nulle (rien dans la boîte de saisie) dans le bloc-notes. Indiquer sous quel compilateur le hash a été obtenu.

5. Répéter les étapes 1 à 4 en utilisant Delphi 2009 comme compilateur.

6. Copier le contenu du bloc-notes dans un nouveau commentaire à ma source (ou envoie-moi un message privé).

7. C'est fini ! Cela devrait nous aider à voir le problème.

Cordialement, Bacterius !
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
4 juin 2009 à 12:10
pour les hashs, je nŽai que compilé lŽexemple que tu as posté. rien de plus et il utilise

Z := #0;
dans les 2 cas.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 juin 2009 à 20:52
Voilà, nouvel exemple, une sorte de mélange entre Password Example et Global Example ... Voir description de la source, j'ai mis à jour.
Sinon, petite nouveauté, j'avais besoin d'une barre de progression à état indéfini (pour le brute-force), j'ai donc créé un composant qui surcharge le composant TProgressBar existant. Rien de très compliqué ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 juin 2009 à 13:07
Oui ben j'ai compris, je te demande les hashs sous Delphi 7 ET sous Delphi 2009.
Merci.

Cordialement, Bacterius !
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
3 juin 2009 à 01:09
cŽest sous Delphi 2009 que cela ne marche pas.
avec delphi 7 cela marche tres bien.
je mŽexcuse de nŽetre pas ete plus clair
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
2 juin 2009 à 18:23
@Djmmix : merci pour l'info :p je suis encore newbie en asm ...

@Jeffray : Etrange, indeed ... un algorithme de hash se doit déterministe. Pourrais-tu m'indiquer (en commentaire de la source ou en mp) les hashs des chaînes suivantes précisant si c'est sous Delphi 7 ou Delphi 2009 ? Normalement, il n'y a rien de bien exotique ...
Voici les chaîne à vérifier :

[chaîne nulle : #0]
'1234'
'1200'
A tester sous les 2 compilateurs chacun.

Cordialement, Bacterius !

PS : pour le brute-force, vous ne devrez pas mettre trop de temps pour 4 caractères, mon PC me fait du 1 million de passes par seconde, et il est pas à son max.
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
2 juin 2009 à 11:36
la il ya donc un probleme chez moi, lorsque jŽutilise delphi 7, et que je donne le code a hasher '1234', et apres jŽappelle le bruteforçage, il me donne les '1234' que jŽai mis auparavant.
mais avec delphi2009 il me donne '1200'.
car jŽutilise bien delphi 7 et delphi 2009.
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
2 juin 2009 à 11:31
@bactérius:"Delphi va se compliquer la vie quand il assemble mon algorithme (avec les Inc, xor, and, etc ...). "

pas tellement en faite le code asm réaliser genre b:= a xor c fera en asm compiler xor eax,edx (enfin j ai prit les registre entier sa aurai pu etre un byte etc mais sa serai trop technique ^^ ou même d'autre registre ) apres la valeur de eax peut etre mi soit dans une adresse mémoire ou utiliser pour les instruction suivant donc de ce coté delphi s'en sort pas trop mal pour le code compiler ^^
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
2 juin 2009 à 11:26
j'ai delphi 2009 je peut te dire que le code marche très bien :)

pour le bruteforce j'aurai codé la parti du bruteforçage en asm ( plus rapide ^^ ) même si delphi fait un code un peut près propre ^^ (quand il réalise pas trop de call partout :p )

j'ai tester sous delphi 6 et 2009 aucun soucis rencontré très bonne source :)
jeffray03 Messages postés 19 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 7 juin 2012
2 juin 2009 à 09:46
Salut, une petite Question, pourquoi le code ne fonctionne pas avec Delphi 2009?
est ce un probleme de compatibilité?
Merci
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 23:00
Bon petite MAJ afin de trier la liste des fichiers hashés, c'est surtout pour mon usage afin de détecter des collisions (je prends des fichiers dans ma machine - il y a de tout dans le cache internet). C'est peut-être un poil moins logique qu'avant, mais bon ça m'aide.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 17:38
Moi aussi j'utilise très peu d'ASM, je ne sais d'ailleurs pas coder en asm, je tâtonne encore, mais ça commence à venir. J'avais fait un test en asm de la 1ere partie de l'algorithme (avant les Inc, le mixage), mais je recevais à chaque fois une violation d'accès dans les Inc suivant l'asm, je pense que je me suis trompé entre la variable et le pointeur (j'ai peut-être incrémenté l'adresse lol).

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 mai 2009 à 16:03
J'utilise très peu ASM..
Il faudrait poser la question sur le forum en question ou à f0xi.
Il semble néanmoins que certains calculs gagnent en vitesse à être écrits directement en assembleur.
A chaque fois, il faut faire la part entre le gain en vitesse, la complexité et/ou la maintenance du code.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 15:30
lol
Mais dis-moi, j'ai l'impression que Delphi va se compliquer la vie quand il assemble mon algorithme (avec les Inc, xor, and, etc ...). Peut-être serait-il plus rapide de l'écrire directement en assembleur ? Quand je regarde la fenêtre "CPU", Delphi fait un code pas possible pour une addition, un xor et un or ...

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 mai 2009 à 14:54
hem..j'ai du faire une erreur...
8/10 pour cette belle source.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 14:48
Evidemment si tu mets le numérateur négatif, et que le dénominateur est toujours positif (c'est un carré), ça donnera forcément un nombre négatif ... lol

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 mai 2009 à 14:37
bon la note hummhhhh...
voyons voir..

(16*7 - 32*7) / power(7,2) = -2,28

aie !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 14:32
Euh non je n'ai pas fait varier le polynome, ni la table, j'ai juste changé le "and" en "or" dans les mixages. Mais ça pourrait être une bonne idée de faire varier le polynome. Je remets la main sur le code qui me calcule ça et je le garde précieusement.

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 mai 2009 à 14:25
Je suppose que dans la maj tu as fait varier le polynome $3E8A42F7 ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 14:23
Effectivement, c'est un hachage de 16 octets, merci Cantador :) je mets à jour.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 14:22
Oh la la oui je me suis trompé ... il y a un grave problème de logique, mais je ne vois pas où ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 mai 2009 à 14:16
@Cantador : Ben oui : 32 octets <=> 128 bits ? Je me suis peut-être trompé, je vais voir.

J'ai fait une MAJ, j'ai détecté une collision graçe à mon flair : vmmreg32.dll et twunk_16.exe dans le dossier Windows. Pas la même taille, ni la même info, mais hash identique. J'ai légérement modifié l'algorithme, la collision a été écartée, mais j'en redoute d'autres ...

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 mai 2009 à 14:13
cet algorithme va réduire........
...........(de taille fixe : 32 octets).

Hachage <---- de 128 bits, c'est la réunion de W, X, Y et Z (32 bits chacun)

?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 mai 2009 à 21:23
J'ai également corrigé la fonction HashStr : plutôt que de mettre inutilement en buffer (perte de temps gigantesque, et aussi de mémoire), je passe directement un pointeur sur la chaîne, ça va plus vite et c'est plus élégant.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 mai 2009 à 21:16
Non en fait c'est une mauvaise idée de faire le changement cité plus haut, je ferai des unités séparées pour le 256 et le 512 (si ils viennent).
J'ai sinon ajouté un nouvel exemple, voyez la description.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 mai 2009 à 21:25
La prochaine étape sera peut-être d'ajouter une variable "Bits" qui contiendra le nombre de bits du hash (128, 256, 512, 1024 ...). Rien de très compliqué, il faudra juste agrandir un peu la table HashTable, et remplacer les A, B, C, D du THash par un array [0..(Bits - 1) div 32] of Longword;
Je ne mets pas à jour encore à cause des exemples qu'il faudrait refaire ... on verra mercredi prochain.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 mai 2009 à 20:09
Je t'en prie Djmmix ! Si tu as des remarques, même négatives, n'hésite pas !

Cordialement, Bacterius !
djmmix Messages postés 152 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 29 avril 2009
24 mai 2009 à 16:53
hello Bactérius,

ta source m'a l'air très intéressante :)

je vais regardé sa de plus près merci ^^
Rejoignez-nous