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
};
8350e5a3e24c153df2275c9f80692773da853b0d3f88d99b30283a69e6ded6bbda33def2a42df13975352846c30338cdd5976f79d83d3a0dc9806c3c66f3efd8