Je pensais juste une somme (en prenant checksum au sens littéral, c'est vrai qu'on utilise par abus de langage le même mot pour des mécanisme de contrôle qui ne sont pas des sommes).
En supposant que tu as tes données à comparer dans un buffer linéaire (int64 buffer[]):
int64 checksum = 0;
for (int i = 0; i < sizeof(buffer)/sizeof(int64); i++)
checksum += buffer[i];
Pas besoin de s'embèter à faire plus compliqué si le risque n'est pas une dégradation de canal de communication (qui change juste quelques bits) ou une attaque malicieuse (ou ce serait facile de changer deux variables de façons qui se compensent).
C'est possible d'utiliser un xor au lieu d'une addition, mais je pense que dans un truc fait en logiciel ça changera pas grand chose aux performances, et l'addition doit avoir des propriétés légèrement meilleures (il y a un peu d'interaction entre les bits, alors que le xor serait strictement "vertical", assurant une intégrité de chaque bit oe façon indépendante)
[^] # Re: Pourquoi un CRC?
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au journal Sortie de Bim! en version 16, avec des bots. Évalué à 7 (+4/-0).
Je pensais juste une somme (en prenant checksum au sens littéral, c'est vrai qu'on utilise par abus de langage le même mot pour des mécanisme de contrôle qui ne sont pas des sommes).
En supposant que tu as tes données à comparer dans un buffer linéaire (int64 buffer[]):
int64 checksum = 0;
for (int i = 0; i < sizeof(buffer)/sizeof(int64); i++)
checksum += buffer[i];
Pas besoin de s'embèter à faire plus compliqué si le risque n'est pas une dégradation de canal de communication (qui change juste quelques bits) ou une attaque malicieuse (ou ce serait facile de changer deux variables de façons qui se compensent).
C'est possible d'utiliser un xor au lieu d'une addition, mais je pense que dans un truc fait en logiciel ça changera pas grand chose aux performances, et l'addition doit avoir des propriétés légèrement meilleures (il y a un peu d'interaction entre les bits, alors que le xor serait strictement "vertical", assurant une intégrité de chaque bit oe façon indépendante)