Salut

!
Les algorithmes CRC sont très documentés sur le web. Tu trouveras sur developpez.com un descriptif très précis et en français du principe de fonctionnement.
http://dvsoft.developpez.com/Articles/CRC/Pour ce qui est de la variable mystérieuse valant "edb88320", elle n'a pas du tout été choisie au pif par le concepteur. Voilà un paragraphe explicatif :
There are many C examples of this code around, and they include the
-- magic constant EDB88320 without comment. This constant has my vote for
-- obscure constant of the year. It is not the CRC polynomical.
-- Just because it bugs me to see it undocumented, here is the derivation.
-- The CRC polynomial is stated in the standard to be::
-- x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
-- If you set a bit for each non-zero x exponent, NUMBERING FROM THE LEFT,
-- STARTING AT 1 (as hardware designers used to do in the old days before
-- most current programmers were born) you'd get:
-- 1101 1011 0111 0001 0000 0110 0100 0001 (DB710641)
-- This *IS* the CRC polynomial.
-- But C programmers want to squeze the last cycle out of their
-- code, so instead of XORing with this obvious constant, and then
-- shifting, and setting the high order bit, they shift, and then XOR with
-- a shifted constant with the high order bit set..
-- So the C programmer needs the real CRC constant shifted right one bit
-- with the high order bit set (since CRC's shift in one bits) so what they
-- use is:
-- 1110 1101 1011 1000 1000 0011 0010 0000 (EDB88320)
-- Which is the constant you find in the reference C code.
Source :
http://www.cc.utah.edu/~nahaj/ada/crc/png_crc_table_generator.adb.htmlJ'en profite pour t'avertir qu'il existe différentes versions de CRC32. L'algorithme est le même, seule le polynome change. Méfie toi donc en cherchant de la documentation et ne t'inquiète pas si tu trouves des images différentes avec d'autres sources.
Enfin, pour éclairer Iansus, MD5 utilise bien des "constantes" de départ à partir desquelles il fabrique l'image renvoyée. Il y en a de deux types :
- Les quatre constantes qui forment l'image "par défaut", avant toute modification. On les trouve en page 3 de la RFC
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Le choix est évident. Il s'agit d'avoir une représentation égale de chaque chiffre.
On trouve d'aillleurs dans d'autres versions :
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
Ce qui montre bien que c'est cette représentation égale qui importe, car seule
l'ordre des chiffres a changée.
Mais MD5 utilise aussi un tableau de 44 entiers auquel il applique des fonctions trigonométriques. C'est la partie que tu as cité dans ton post. En réalité, ces constantes ne sont pas si grandes au départ. Voilà leur vraie valeur de départ, tel que l'algorithme a été conçu :
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}
Et encore, si on observe, on voit qu'il y a des répétitions de séquences. En réalité, les seules constantes de départ sont {7, 12, 17, 22}{5, 9, 14, 20} {4, 11, 16, 23}{6, 10, 15, 21}
Soit dans un autre ordre : {4,5,6,7}{9,10,11,12}{14,15,16,17} et {20,21,22,23}
Rien de bien mystérieux en fait

Si Iansus n'as pas la même chose dans sa source, c'est simplement que son implémentation contient les constantes après certaines opérations fixes. Les calculs ont été fait à part et les résultats inscrits directement dans la source, pour un léger gain de rapidité

J'avais complètement décortiqué le fonctionnement de md5() il y a pas mal de temps, je crois que je vais essayer de retrouver mes notes pour les partager ici.
J'espère que les liens t'aideront et que c'est maintenant un peu plus clair