Cette signature permet par exemple d'attester l'intégrité du contenu d'un fichier, d'un enregistrement d'une base de données, d'un message échangé, etc. parce qu'il est pratiquement impossible que deux contenus distincts produisent la même signature.
Ainsi :
Le principe est de calculer la valeur de :
Voici l'algorithme Md2 :
X={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Cheksum={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
L=0;
Variable
/******/
I : Entier;
Pour I=0 JusquA 15 Faire
X[I+16]=Buffer[I];
X[I+32]=X[I+16]^X[I];
Fin Pour
Variable
/******/
I : Entier;
J : Entier;
T : Entier;
T=0;
Pour I=0 JusquA 17 Faire
Pour J=0 JusquA 47 Faire
T=(X[J]^TablePiMd2[T]);
X[J]=T;
Fin Pour
T=(T+I)%256;
Fin Pour
Variable
/******/
I : Entier;
Pour I=0 JusquA 15 Faire
L=TablePi[Buffer[I]^L)];
Checksum[I]=L;
Fin Pour
Le flux est toujours prolongé de la sorte que sa taille soit toujours un multiple de 16 octets : la valeur des octets ajoutés est égale au nombre d'octets ajoutés moins 1.
Le code de vérification est ensuite signé comme une tranche de 16 octets du flux prolongé.
TablePi=
{
41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
31, 26, 219, 153, 141, 51, 159, 17, 131, 20
};
8350e5a3e24c153df2275c9f80692773
da853b0d3f88d99b30283a69e6ded6bb
da33def2a42df13975352846c30338cd
d5976f79d83d3a0dc9806c3c66f3efd8