A voir également:
- Checksum 32
- 32 bits - Guide
- Poweriso 32 bit - Télécharger - Gravure
- Md5 checksum - Télécharger - Web & Internet
- Télécharger windows 7 32 bits usb - Télécharger - Systèmes d'exploitation
- Ubuntu 32 bits - Télécharger - Systèmes d'exploitation
11 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
16 juil. 2007 à 09:53
16 juil. 2007 à 09:53
Salut,
Regarde par là:
https://en.wikipedia.org/wiki/List_of_checksum_algorithms
EDIT: Désolé, avait pas vu les messages des autres.
Regarde par là:
https://en.wikipedia.org/wiki/List_of_checksum_algorithms
EDIT: Désolé, avait pas vu les messages des autres.
blux
Messages postés
26546
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
24 décembre 2024
3 318
16 juil. 2007 à 09:48
16 juil. 2007 à 09:48
Salut,
un CRC32 devrait te suffire, non ?
control
un CRC32 devrait te suffire, non ?
control
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 juil. 2007 à 09:52
16 juil. 2007 à 09:52
La CRC32 est assez répandue.
On trouve assez facilement le code sur internet (chercher CRC32 sur google)
Note qu'une CRC 32 est bien pour vérifier l'intégrité des donnés, mais pas assez fiable pour une authentification (pour laquelle il est indispensable de passer par MD5 ou SHA1).
On trouve assez facilement le code sur internet (chercher CRC32 sur google)
Note qu'une CRC 32 est bien pour vérifier l'intégrité des donnés, mais pas assez fiable pour une authentification (pour laquelle il est indispensable de passer par MD5 ou SHA1).
Le CRC-32 permet de vérifier une donnée 32 bits, ca n'est pas mon but (ou alors ai-je mail compris son application)
Je précise :
Je stocke en Flash externe des paquets de données, environ 1500 valeurs 32 bits, pour fixer les idées. je voudrais associer un checksum à chaque paquet, pas à chaque valeur de 32 bit (ca pendrait trop de temps et trop d'espace mémoire en flash). La taille des paquets sera fixe (x valeurs 32 bits, j'ia cité 1500 pour exemple au dessus, ca n'est pas totalement fixé encore dans mon programme).
Mon programme génère un offset pour la lecture en flash. Il se rend à cet offset, et lit x valeurs successives. L'idée est donc de pouvoir vérifier deux choses :
* Que j'aie bien récupéré le bon paquet : ni celui d'a coté, ni un mélange entre deux paquets successif. Ca revient à détecter une erreur dans la génération de mon offset.
* Que les données ne sont pas corrompues : par un parasite sur le bus, par une mauvaise écriture à la base, que sais-je...
Je souhaite donc générer à partir de x valeurs 32 bits une (x+1) ième valeur, 32 bits également.
Je viens de lire une astuce, qui consiste à calculer un checksum genre MD5, et à n'en garder que 32 bits sur les 128. Mais ca me fera faire des calculs pour rien, et comme je suis tendu niveau ressources processeurs...
Je précise :
Je stocke en Flash externe des paquets de données, environ 1500 valeurs 32 bits, pour fixer les idées. je voudrais associer un checksum à chaque paquet, pas à chaque valeur de 32 bit (ca pendrait trop de temps et trop d'espace mémoire en flash). La taille des paquets sera fixe (x valeurs 32 bits, j'ia cité 1500 pour exemple au dessus, ca n'est pas totalement fixé encore dans mon programme).
Mon programme génère un offset pour la lecture en flash. Il se rend à cet offset, et lit x valeurs successives. L'idée est donc de pouvoir vérifier deux choses :
* Que j'aie bien récupéré le bon paquet : ni celui d'a coté, ni un mélange entre deux paquets successif. Ca revient à détecter une erreur dans la génération de mon offset.
* Que les données ne sont pas corrompues : par un parasite sur le bus, par une mauvaise écriture à la base, que sais-je...
Je souhaite donc générer à partir de x valeurs 32 bits une (x+1) ième valeur, 32 bits également.
Je viens de lire une astuce, qui consiste à calculer un checksum genre MD5, et à n'en garder que 32 bits sur les 128. Mais ca me fera faire des calculs pour rien, et comme je suis tendu niveau ressources processeurs...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il semblerait en fait que ce que je cherche soit une fonction de hachage (hash function), et non pas un checksum.
Je fouille Wikipedia, mais rien en dessous de 128 bits, apparemment... :(
https://en.wikipedia.org/wiki/Cryptographic_hash_function
Je fouille Wikipedia, mais rien en dessous de 128 bits, apparemment... :(
https://en.wikipedia.org/wiki/Cryptographic_hash_function
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 juil. 2007 à 11:49
16 juil. 2007 à 11:49
CRC32 est une fonction de hashage, mais elle ne doit pas être utilisée à des fins cryptographiques.
Je comprend pas comment un CRC peut être calculé sur 1500 valeurs 32 bits, alors que les définitions que j'ai (ici ou sur wikipedia) parlent de division bit à bit. De plus, la notion de division m'ennuie, c'est pas l'opération la plus rapide...
J'ai trouvé ca par contre, qui me semble pas mal : Adler-32
https://en.wikipedia.org/wiki/Adler-32
J'ai trouvé ca par contre, qui me semble pas mal : Adler-32
https://en.wikipedia.org/wiki/Adler-32
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 juil. 2007 à 12:11
16 juil. 2007 à 12:11
Tu te prend la tête: il y a des librairies CRC32 prêtes à l'emploi dans pratiquement tous les langages.
Tu peux leur passer une chaîne de taille arbitraire, en une fois ou plusieurs fois sans problème.
Google est ton ami.
En C: http://www.netrino.com/Connecting/2000-01/crc.zip
En C++: https://www.boost.org/doc/libs/1_72_0/libs/crc/crc.html
etc.
Tu peux leur passer une chaîne de taille arbitraire, en une fois ou plusieurs fois sans problème.
Google est ton ami.
En C: http://www.netrino.com/Connecting/2000-01/crc.zip
En C++: https://www.boost.org/doc/libs/1_72_0/libs/crc/crc.html
etc.
En effet, je me prend la tête. Mais c'est pas pour rien, je bosse sur de l'embarqué, et mes contraintes temps réel (et d'espace mémoire) sont importantes. Je ne peux pas me permettre de laisser partir des ressources dans des tâches que je ne maitrise pas. Vu le fonctionnement du CRC, avec de la division, il y a fort à parier que ca prendra un temps fou.
En plus, mais ca c'est plus personnel et subjectif, j'aime comprendre ce que je code, donc j'aime bien faire moi-même mes fonctions. Au moins la 1ere fois, ensuite evidemment si y'a moyen de gagner du temps de développement ou du temps processeur avec des packages déjà près... Je sais, oui, que c'est se prendre la tête. mais c'est assumé :)
Sinon, pour précision, je code en C, avec parfois des bouts d'assembleur.
En plus, mais ca c'est plus personnel et subjectif, j'aime comprendre ce que je code, donc j'aime bien faire moi-même mes fonctions. Au moins la 1ere fois, ensuite evidemment si y'a moyen de gagner du temps de développement ou du temps processeur avec des packages déjà près... Je sais, oui, que c'est se prendre la tête. mais c'est assumé :)
Sinon, pour précision, je code en C, avec parfois des bouts d'assembleur.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 juil. 2007 à 13:34
16 juil. 2007 à 13:34
Je t'encourage à regarder les sources avant de les jeter: Il n'y a pas de division utilisée, mais des décalage de bits.
En l'occurence, la source C du CRC dont j'ai donné la référence ne fait que 200 lignes.
En l'occurence, la source C du CRC dont j'ai donné la référence ne fait que 200 lignes.
Utilisateur anonyme
16 juil. 2007 à 13:52
16 juil. 2007 à 13:52
Bonjour,
En 84 lorsque j'ai commencé à codé en assembleur, les contraintes d'espace et de temps était
toujours les priorités. Ceci dit, j'ai personnellement codé tout un "BIOS" pour le processeur
MC6809 et il y avait une partie communication RS232.
Or j'ai codé tout une série de commande ainsi qu'un protocol de communication sur 8 bits. Ceci dit, je trouve que votre dileme ressemble un peu à ces préoccupations de mon passé.
Suggestion :
Comme "checksum" ( somme de vérification ) et ce même sur 32 bits, vous pouvez coder
16 bits pour l'offset, et 16 bits pour le data. Vous pourriez aussi coder 4 conditions sur huit
bits. Bien qu'une somme soit banal, elle n'en demeure pas moins efficace. En assembleur
c'est le bit d'overflow qui vous fournira le (x+1) ième valeur.
Penser toujours en fonction du fait que en regroupant le binaire par 4 bits, vous passer du binaire
à l'hexadécimal instantannément !
32 bits
1010 1010 1010 1010 1010 1010 1010 1010 (2)
A A A A A A A A (16)
si vous avez à construire un [ checksum ] de vérification, commencer par quelque chose de simple.
la rigeur de l'assembleur rendra la fonction efficace. Enfin ce sont là quelques idées.
Cordialement
Lupin
En 84 lorsque j'ai commencé à codé en assembleur, les contraintes d'espace et de temps était
toujours les priorités. Ceci dit, j'ai personnellement codé tout un "BIOS" pour le processeur
MC6809 et il y avait une partie communication RS232.
Or j'ai codé tout une série de commande ainsi qu'un protocol de communication sur 8 bits. Ceci dit, je trouve que votre dileme ressemble un peu à ces préoccupations de mon passé.
Suggestion :
Comme "checksum" ( somme de vérification ) et ce même sur 32 bits, vous pouvez coder
16 bits pour l'offset, et 16 bits pour le data. Vous pourriez aussi coder 4 conditions sur huit
bits. Bien qu'une somme soit banal, elle n'en demeure pas moins efficace. En assembleur
c'est le bit d'overflow qui vous fournira le (x+1) ième valeur.
Penser toujours en fonction du fait que en regroupant le binaire par 4 bits, vous passer du binaire
à l'hexadécimal instantannément !
32 bits
1010 1010 1010 1010 1010 1010 1010 1010 (2)
A A A A A A A A (16)
si vous avez à construire un [ checksum ] de vérification, commencer par quelque chose de simple.
la rigeur de l'assembleur rendra la fonction efficace. Enfin ce sont là quelques idées.
Cordialement
Lupin