Ce n'est pas une certification étant donné qu'au moins deux flux différents peuvent générer la même clé.
Voici l'algorithme en Up ! 5GL :
/****************************************************************/
Fonction CalculerSignatureCrc32(Flux : Nul Ou IFlux) Retourner Nul Ou Binaire
/* Objet : Calcule la signature Crc. */
/****************************************************************/
Constante
/*******/
TailleTableCrc32=256;
Variable
/******/
TableCodes : Tableau[TailleTableCrc32] De Nul Ou Entier;
Code : Entier;
I : Entier;
J : Entier;
S : Entier;
B : Binaire;
TableEntiers : Tableau[4] De Nul Ou Entier;
Debut
Si Flux==Nul Alors
Retourner Nul;
Fin Si
/* Fabrication de la table. */
Pour I=0 JusquA TailleTableCrc32-1 Faire
Code=I;
Fin Pour
Pour J=0 JusquA 7 Faire
Si Code&0x1!=0 Alors
TableCodes[I]=Code;
Code=0xEDB88320^(Code>>1);
Sinon
Code=Code>>1;
Fin Pour
/* Calcul de la signature. */
S=0xFFFFFFFF;
TantQue Non Flux.FinDeFlux Faire
Flux.Lire(B,1);
Fin TantQue
S=TableCodes[(S^B[0])&0xFF]^(S>>8);
/* Generation de la signature. */
TableEntier[0]=S&0x000000FF;
TableEntier[1]=(S&0x0000FF00)>>8;
TableEntier[2]=(S&0x00FF0000)>>16;
TableEntier[3]=(S&0xFF000000)>>24;
Retourner Binaire(TableEntiers);
Fin Fonction