OVH Cloud OVH Cloud

calcul de crc32

16 réponses
Avatar
octane
Bonjour,

connaitriez vous un outil en ligne de commande qui me calculerait les
crc32?
un equivalent a md5sum, mais qui me calculerait le crc32

je suis tombe sur
http://pobox.com/~newt/code/check-4.3-src.tgz
mais il ne calcule pas les crc32 de 6 octets.

je cherche a calculer tous les crc32 de tous les blocs de 6 octets
compris dans [A-Z][a-z][0-9]

(sur linux si cela a son importance)
Merci

10 réponses

1 2
Avatar
Stephane Chazelas
On 9 May 2006 06:06:26 -0700, wrote:
Bonjour,

connaitriez vous un outil en ligne de commande qui me calculerait les
crc32?
un equivalent a md5sum, mais qui me calculerait le crc32

je suis tombe sur
http://pobox.com/~newt/code/check-4.3-src.tgz
mais il ne calcule pas les crc32 de 6 octets.

je cherche a calculer tous les crc32 de tous les blocs de 6 octets
compris dans [A-Z][a-z][0-9]
[...]


$ perl -M'Digest::CRC crc32' -le 'print crc32("abcd")'
3984772369


Faudra peut-etre installer le module perl qui va bien.

--
Stephane

Avatar
octane
calcul de crc32
$ perl -M'Digest::CRC crc32' -le 'print crc32("abcd")'

3984772369
Faudra peut-etre installer le module perl qui va bien.


euh, ca ne risque pas d'etre un poil lent avec perl?

c'est pour ca que je cherchais un programme en C


Avatar
Stephane Chazelas
On 9 May 2006 06:36:57 -0700, wrote:
calcul de crc32
$ perl -M'Digest::CRC crc32' -le 'print crc32("abcd")'

3984772369
Faudra peut-etre installer le module perl qui va bien.


euh, ca ne risque pas d'etre un poil lent avec perl?

c'est pour ca que je cherchais un programme en C


???

Si tu lances un programme en C pour chaque chaine a crc'er, ca
sera forcement plus lent que si tu fais tout en perl.

Qu'est-ce que tu cherches exactement? L'algotithme pour
l'implementer en C ou une bibliotheque C avec une fonction qui
fait le CRC32?

--
Stephane



Avatar
octane
Qu'est-ce que tu cherches exactement?


j'ai un CRC32
je sais que ce sont 6 caracteres qui donnent ce CRC

je voudrais connaitre la liste de tous les 6 caracteres
qui me donnent le CRC32

ex: 123456 me donne: B8B072C2

y a t'il d'autres chaines de 6 caracteres qui me donnent ce resultat?

Je pensais qu'il existatit un utilitaire en ligne de commande comme
md5sum qui me calculait les crc32, mais je n'ai pas trouve.

j'aurais fait tourner le programme avec l'ensemble des chaines de
6 caracteres et verifie avec mon resultat.

Peut etre faut il que je m'oriente vers un groupe de crypto qui aurait
connaissance de ce genre d'outil?

L'algorithme pour l'implementer en C


function crc(bit array bitString[1..len], int polynomial)

ca, oui, je serais preneur. A priori je connais mon array et mon
polynomial.
mais c'est peut etre vers un groupe C qu'il faut que j'aille alors?

Avatar
octane
Qu'est-ce que tu cherches exactement?


j'ai un CRC32
je sais que ce sont 6 caracteres qui donnent ce CRC

je voudrais connaitre la liste de tous les 6 caracteres
qui me donnent le CRC32

ex: 123456 me donne: B8B072C2

y a t'il d'autres chaines de 6 caracteres qui me donnent ce resultat?

Je pensais qu'il existatit un utilitaire en ligne de commande comme
md5sum qui me calculait les crc32, mais je n'ai pas trouve.

j'aurais fait tourner le programme avec l'ensemble des chaines de
6 caracteres et verifie avec mon resultat.

Peut etre faut il que je m'oriente vers un groupe de crypto qui aurait
connaissance de ce genre d'outil?

L'algorithme pour l'implementer en C


function crc(bit array bitString[1..len], int polynomial)

ca, oui, je serais preneur. A priori je connais mon array et mon
polynomial.
mais c'est peut etre vers un groupe C qu'il faut que j'aille alors?

Avatar
Stephane Chazelas
On 9 May 2006 07:53:35 -0700, wrote:
Qu'est-ce que tu cherches exactement?


j'ai un CRC32
je sais que ce sont 6 caracteres qui donnent ce CRC

je voudrais connaitre la liste de tous les 6 caracteres
qui me donnent le CRC32

ex: 123456 me donne: B8B072C2


Ah. Chez moi, ca done 0972d361

$ perl -M'Digest::CRC crc32' -e 'printf "%xn", crc32("123456")'
972d361


y a t'il d'autres chaines de 6 caracteres qui me donnent ce resultat?

Je pensais qu'il existatit un utilitaire en ligne de commande comme
md5sum qui me calculait les crc32, mais je n'ai pas trouve.

j'aurais fait tourner le programme avec l'ensemble des chaines de
6 caracteres et verifie avec mon resultat.
[...]


Perl a un module CRC32 qui fait ca. Tu peux faire une boucle en
perl qui fait ca. Tu as des fonctions de crc32 dans la zlib,
donc tu peux le faire en C, mais (26 + 26 + 10) ^ 6, ca fait
tout de meme 56800235584, ca peut prendre un peu de temps.


Peut etre faut il que je m'oriente vers un groupe de crypto qui aurait
connaissance de ce genre d'outil?


Peut-etre, oui.

L'algorithme pour l'implementer en C


function crc(bit array bitString[1..len], int polynomial)

ca, oui, je serais preneur. A priori je connais mon array et mon
polynomial.
mais c'est peut etre vers un groupe C qu'il faut que j'aille alors?


Dans la zlib, tu as au moins le CRC32. Dans Digest::CRC, tu as
peut-etre d'autres CRCs avec d'autres polynomes.

--
Stephane


Avatar
Nicolas George
Stephane Chazelas wrote in message
:
ex: 123456 me donne: B8B072C2
Ah. Chez moi, ca done 0972d361


$ perl -M'Digest::CRC crc32' -e 'printf "%xn", crc32("123456")'
972d361


Chez moi, ça donne bien B8B072C2 (et E28AD0FD en big-endian (qui est un
algorithme différent, et pas lié à l'architecture où on l'exécute)).


Avatar
Nicolas George
wrote in message
:
y a t'il d'autres chaines de 6 caracteres qui me donnent ce resultat?


Oui. Je ne sais pas les quelles, mais c'est vrai, par un argument de
cardinalité (il y a plus de chaînes de six caractères que de résultats
possibles) et de linéarité (il y a autant d'antécédents pour chaque valeur
possible).

j'aurais fait tourner le programme avec l'ensemble des chaines de
6 caracteres et verifie avec mon resultat.


Euh, ce n'est vraiment pas utile. CRC32 est linéaire, ce que tu demandes est
simplement une semi-inversion de matrice 48×32, ça peut presque se faire à
la main.

function crc(bit array bitString[1..len], int polynomial)

ca, oui, je serais preneur. A priori je connais mon array et mon
polynomial.


Euh, chercher sur le web, ça peut être pas mal non plus. Le plus facile à
trouver est dans les sources de Linux, le fichier lib/crc32.c. J'en ai
extrait l'essentiel, et remis en C standard :

#define CRCPOLY_LE 0xedb88320
#define CRCPOLY_BE 0x04c11db7

uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len)
{
int i;

while(len--) {
crc ^= *p++;
for(i = 0; i < 8; i++)
crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
}
return crc;
}

uint32_t crc32_be(uint32_t crc, unsigned char const *p, size_t len)
{
int i;

while(len--) {
crc ^= *p++ << 24;
for (i = 0; i < 8; i++)
crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0);
}
return crc;
}

Ce code est distribué suivant les termes de la GPL 2, évidemment.

Avatar
octane
ex: 123456 me donne: B8B072C2
Ah. Chez moi, ca done 0972d361


$ perl -M'Digest::CRC crc32' -e 'printf "%xn", crc32("123456")'
972d361


Chez moi, ça donne bien B8B072C2


que tu as verifie comment? avec quel outil? un bout de code? lequel?
merci

(et E28AD0FD en big-endian (qui est un
algorithme différent, et pas lié à l'architecture où on l'exécu te)).




Avatar
Nicolas George
wrote in message
:
que tu as verifie comment? avec quel outil? un bout de code? lequel?


Avec le bout de code que j'ai posté trois messages plus haut.

1 2