Calcul d'un checksum 8 bit crc32()

Petit nouveau ! | 1 Messages

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

ViPHP
ViPHP | 1996 Messages

26 sept. 2014, 12:04

Et tu obtiens quoi ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 151 Messages

26 sept. 2014, 13:06

Bonjour
return sprintf("%u", $crc); 
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Invité
Invité n'ayant pas de compte PHPfrance

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

ViPHP
xTG
ViPHP | 7331 Messages

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

Invité
Invité n'ayant pas de compte PHPfrance

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