Calcul d'un checksum 8 bit crc32()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calcul d'un checksum 8 bit crc32()

Re: Calcul d'un checksum 8 bit crc32()

par Invité » 28 sept. 2014, 08:25

Bj,,
J'ai deja le resultat du checksum du fichier hexa en 8 bits qui est 7d50
C'est un fichier qui proviens du monde automobile.
Le but est d'upload le fichier est de tester le fichier via le checksum car il est évidant que deux fichiers avec le même checksum peuvent porter un nom différent.
Je pourrais vous mettre le fichier en téléchargement !!
Mais c'est vrai que je pourrais le contrôler en 32 bits via le crc32(), je vais poser la question aux techniciens
Merci pour votre précise
Stéphane

Re: Calcul d'un checksum 8 bit crc32()

par xTG » 26 sept. 2014, 18:33

C'est pour comparer avec un CRC déjà calculé ou bien tu as encore tout à faire ?
Car un CRC peut se calculer de plein de façon différente, de ce fait il me semble qu'un CRC ramené à 8bits peut ne pas être bijectif si on utilise des algorithmes différents (cela dépend de la profondeur du polynôme utilisé).
Raison pour laquelle on préfère les CRC sur 32bits qui rendent les chances d'erreur de l'algorithme utilisé nulle.
Donc si tu as déjà un CRC que tu veux comparer il va te falloir le polynôme qui a servi à le générer.

En voici un en tout cas basé sur le polynôme x^8+x^6+x^3+x^2+1 :
global $crc8_table;
$crc8_table = array(
    0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0x95, 0xab, 0xe9, 0xd7,
    0x6d, 0x53, 0x11, 0x2f, 0x4f, 0x71, 0x33, 0x0d, 0xb7, 0x89, 0xcb, 0xf5,
    0xda, 0xe4, 0xa6, 0x98, 0x22, 0x1c, 0x5e, 0x60, 0x9e, 0xa0, 0xe2, 0xdc,
    0x66, 0x58, 0x1a, 0x24, 0x0b, 0x35, 0x77, 0x49, 0xf3, 0xcd, 0x8f, 0xb1,
    0xd1, 0xef, 0xad, 0x93, 0x29, 0x17, 0x55, 0x6b, 0x44, 0x7a, 0x38, 0x06,
    0xbc, 0x82, 0xc0, 0xfe, 0x59, 0x67, 0x25, 0x1b, 0xa1, 0x9f, 0xdd, 0xe3,
    0xcc, 0xf2, 0xb0, 0x8e, 0x34, 0x0a, 0x48, 0x76, 0x16, 0x28, 0x6a, 0x54,
    0xee, 0xd0, 0x92, 0xac, 0x83, 0xbd, 0xff, 0xc1, 0x7b, 0x45, 0x07, 0x39,
    0xc7, 0xf9, 0xbb, 0x85, 0x3f, 0x01, 0x43, 0x7d, 0x52, 0x6c, 0x2e, 0x10,
    0xaa, 0x94, 0xd6, 0xe8, 0x88, 0xb6, 0xf4, 0xca, 0x70, 0x4e, 0x0c, 0x32,
    0x1d, 0x23, 0x61, 0x5f, 0xe5, 0xdb, 0x99, 0xa7, 0xb2, 0x8c, 0xce, 0xf0,
    0x4a, 0x74, 0x36, 0x08, 0x27, 0x19, 0x5b, 0x65, 0xdf, 0xe1, 0xa3, 0x9d,
    0xfd, 0xc3, 0x81, 0xbf, 0x05, 0x3b, 0x79, 0x47, 0x68, 0x56, 0x14, 0x2a,
    0x90, 0xae, 0xec, 0xd2, 0x2c, 0x12, 0x50, 0x6e, 0xd4, 0xea, 0xa8, 0x96,
    0xb9, 0x87, 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x03, 0x63, 0x5d, 0x1f, 0x21,
    0x9b, 0xa5, 0xe7, 0xd9, 0xf6, 0xc8, 0x8a, 0xb4, 0x0e, 0x30, 0x72, 0x4c,
    0xeb, 0xd5, 0x97, 0xa9, 0x13, 0x2d, 0x6f, 0x51, 0x7e, 0x40, 0x02, 0x3c,
    0x86, 0xb8, 0xfa, 0xc4, 0xa4, 0x9a, 0xd8, 0xe6, 0x5c, 0x62, 0x20, 0x1e,
    0x31, 0x0f, 0x4d, 0x73, 0xc9, 0xf7, 0xb5, 0x8b, 0x75, 0x4b, 0x09, 0x37,
    0x8d, 0xb3, 0xf1, 0xcf, 0xe0, 0xde, 0x9c, 0xa2, 0x18, 0x26, 0x64, 0x5a,
    0x3a, 0x04, 0x46, 0x78, 0xc2, 0xfc, 0xbe, 0x80, 0xaf, 0x91, 0xd3, 0xed,
    0x57, 0x69, 0x2b, 0x15);

function crc8($data1)
{
    global $crc8_table;

    $crc = 0xff;
    for ($ii1=0;$ii1<strlen($data1);$ii1++){
        $crc = $crc8_table[($crc ^ ($data1[$ii1]))];
    }
    return $crc ^ 0xff;
}
Source : http://stackoverflow.com/questions/1407 ... crc-in-php

Re: Calcul d'un checksum 8 bit crc32()

par Invité » 26 sept. 2014, 13:24

Je viens d'essayer avec

Code : Tout sélectionner

return sprintf("%u", $crc);
et j'obtiens 4242071662
C'est surement un paramètre mais lequelle ?
Merci Stéphane

Re: Calcul d'un checksum 8 bit crc32()

par arnaud69 » 26 sept. 2014, 13:06

Bonjour
return sprintf("%u", $crc); 

Re: Calcul d'un checksum 8 bit crc32()

par Invité » 26 sept. 2014, 13:00

Bj,,
J'obtiens ceci fcd8e06e mais visiblement ce n'est pas en 8 bits
Il me faudrais 7d50
Merci
Stéphane

Re: Calcul d'un checksum 8 bit crc32()

par Aureusms » 26 sept. 2014, 12:04

Et tu obtiens quoi ?

Calcul d'un checksum 8 bit crc32()

par svan1812 » 26 sept. 2014, 11:54

Bonjour à tous,,
Je dois calculer le checksum d'un fichier hexa en 8bit
J'ai déja ecris un petit code avec la fonction crc32() mais visiblement il ne donne pas le résutat en 8 bit
Voici le code :
<?php
function file_crc($file)
{
$file_string = file_get_contents($file);

$crc = crc32($file_string);

return sprintf("%x", $crc);
}

$file_to_crc = "aua37d50.ORI";

echo file_crc($file_to_crc);

?>

En principe le résutat devrais être : 7D50
Donc comment faire ??
Merci d'avance
Stéphane