IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Calcul d'un CRC32


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Calcul d'un CRC32
    Bonjour,

    Je rencontre un problème au niveau d'un calcul de CRC32.
    La classe CRC32 propose la méthode getValue() qui renvoi un long.
    Un long est codé sur 64 bits. Apparemment, la classe CRC32 utilise un long car elle implémente l'interface Checksum.

    Je n'arrive pas a convertir cette valeur de type long en un tableau de 4 byte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            // Calculer le CRC32 sur ce tableau
            byte[] payload = Helpers.concat(code, pass);
     
            CRC32 crc = new CRC32();
            crc.update(payload, 0, payload.length);
     
            long crcValue = crc.getValue();
     
            byte[] crcToByte = ??? ;
    J'ai essayé plusieurs solution a base de ByteBuffer, de conversion vers du int puis vers un tableau de byte, mais rien ne fonctionne.
    Avez vous des pistes de recherche ?

    Cordialement,
    Julien.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    la méthode "a la main":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    long l = ...;
    byte[] tableau = new byte{
       (byte)(l&0xFF),
       (byte)( (l>>>8)  & 0xFF),
       (byte)( (l>>>16) & 0xFF),
       (byte)( (l>>>24) & 0xFF),
       (byte)( (l>>>32) & 0xFF),
       (byte)( (l>>>40) & 0xFF),
       (byte)( (l>>>48) & 0xFF),
       (byte)( (l>>>56) & 0xFF)
    }
    ;
    la méthode je passe par les api qui font déjà le boulot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);   
    byte[] tableau = buffer.array();

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour votre aide.
    Le problème est que c'est deux méthodes retourne des tableaux de 8 byte.

    Je cherche a obtenir un tableau de 4 byte.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un long c'est 8 bytes en java, il n'y a pas le choix. 4 bytes c'est un int. Suffit de supprimer les 4 bytes de poids fort par la suite si tu n'en a pas besoin.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'avais déja une fonction comme celle ci, je ne savais pas si elle fonctionnait.
    Donc a priori oui.

    Je cherche a calculer le CRC32 de la séquence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ff:00:+7 bytes pour chaque caractere du MDP
    Via ce site web : http://www.lammertbies.nl/comm/info/...lculation.html,
    j'obtient la valeur suivante : 0xC78438E1
    alors que ma méthode renvoi : 0x0DE0FF6D

    EDIT : Il s'agit d'une erreur dans la spécification du protocole.
    Problème résolu, merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forum] Calcul checksum 8bit crc32()
    Par svan1812 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 26/09/2014, 12h00
  2. Calculer un CRC32 type ethernet
    Par geek-59600 dans le forum C
    Réponses: 2
    Dernier message: 27/01/2012, 09h17
  3. Calculer le CRC32 d'une chaine de caractère
    Par bumbolol dans le forum Caml
    Réponses: 11
    Dernier message: 11/04/2010, 13h31
  4. Réponses: 3
    Dernier message: 01/07/2009, 17h38
  5. calcul du crc32
    Par lesultan2007 dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/03/2009, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo