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

Sécurité Discussion :

4 méthodes pour créer une empreinte SHA256 base64 : 4 résultats différents


Sujet :

Sécurité

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut 4 méthodes pour créer une empreinte SHA256 base64 : 4 résultats différents
    Bonjour,

    Je dois comparer (via un script Shell AIX si possible) une empreinte (SHA256 base64) générée en Java (à base de org.apache.commons.codec.binary.Base64) avec celle d'un fichier. Le calcul de l'empreinte du fichier sur https://www.online-convert.com est bon :
    hex: 09a5cfc0e5b8372fcb072598339704bd07b193fc7d99e06d88c65a94baa37b3c

    base64: CaXPwOW4Ny/LByWYM5cEvQexk/x9meBtiMZalLqjezw=
    Avec openssl j’obtiens une empreinte différente :
    > echo -n monFichier.pdf | openssl dgst -sha256 | openssl enc -base64 -A
    WARNING: can't open config file: /var/ssl/openssl.cnf
    WARNING: can't open config file: /var/ssl/openssl.cnf
    KHN0ZGluKT0gNzEzYWVmNzkxZmZkMmRlNzFkZGJhNjBkMzZhYzI1NTU3ZGY4ZDVkOWU3MDk4NzU3MWE1N2VkYmFiNmE0ZTdhYwo=
    En python j’ai encore quelque chose de différent :
    > python empreinte.py monFichier.pdf
    MDlhNWNmYzBlNWI4MzcyZmNiMDcyNTk4MzM5NzA0YmQwN2IxOTNmYzdkOTllMDZkODhjNjVhOTRiYWEzN2IzYw==
    Avec shasum j’obtiens la bonne empreinte en hex, mais le passage en base64 avec open ssl donne un résultat différent :
    > shasum --algorithm 256 < monFichier.pdf
    09a5cfc0e5b8372fcb072598339704bd07b193fc7d99e06d88c65a94baa37b3c -

    > shasum --algorithm 256 < monFichier.pdf | openssl enc -base64 -A
    WARNING: can't open config file: /var/ssl/openssl.cnf
    MDlhNWNmYzBlNWI4MzcyZmNiMDcyNTk4MzM5NzA0YmQwN2IxOTNmYzdkOTllMDZkODhjNjVhOTRiYWEzN2IzYyAgLQo=
    A noter que sur l'AIX 7.1 il n'y a pas la commande base64.

    Savez-vous ce que je peux modifier pour avoir un résultat qui corresponde au premier base64 ? Ou comment transformer l'empreinte OK base64 en empreinte hex pour que je puisse la comparer avec celle générée par shasum ?
    Christophe

    Pensez à mettre quand c'est le cas.

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    il faut prêter attention à ce qu'on mouline

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'hello, world!' | openssl dgst -sha256
    (stdin)= 4dca0fd5f424a31b03ab807cbae77eb32bf2d089eed1cee154b3afed458de0dc
    si on chaine les commandes avec un pipe, on va donc envoyer à la prochaine commande la chaine "(stdin)= 4dca0fd5f424a31b03ab807cbae77eb32bf2d089eed1cee154b3afed458de0dc"
    de même le but n'est pas de passer uniquement la chaine en hexadécimal, qui n'est qu'une représentation des données, mais plutôt les données brutes (ce qui revient à chr(0x4d) + chr(0xca) + chr(0x0f) + ...)

    avec openssl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo -n 'hello, world!' | openssl sha256 -binary | openssl base64
    aOZWslHmfoNYvvhIOrDVHGYZ8+ehqfDnWDjUH/No9yg=
    avec Python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import hashlib, base64
    >>> base64.b64encode(hashlib.sha256('hello, world!').digest())
    'aOZWslHmfoNYvvhIOrDVHGYZ8+ehqfDnWDjUH/No9yg='

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Donc, c'est parce que les deux actions se font en deux étapes différentes que je n'ai pas le même résultat (et un résultat KO). Je n'ai pas trouvé comment faire ça en une étape avec openssl.
    En Java ça marche avec le code suivant mais je préfererais ne pas avoir à maintenir du Java en plus du Shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final Empreinte empreinteInfos = new Empreinte();
    empreinteInfos.setFonctionDeHachage(EmpreinteAlgorithme.SHA_256.getNom());
    empreinteInfos.setValue(SAEHelperVersement.calculerEmpreinte(
                fluxInfos, 
                EmpreinteAlgorithme.SHA_256));
    empreinteInfos.setEncoding("base64");
    Savez-vous comment faire les deux actions en une seule fois en Shell (ou Python ou Perl) ?
    Christophe

    Pensez à mettre quand c'est le cas.

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/06/2018, 19h28
  2. Réponses: 2
    Dernier message: 14/04/2015, 15h44
  3. Méthode pour créer une pause d'exécution en javascript
    Par ephemere dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/07/2009, 21h08
  4. La bonne méthode pour créer une DLL ?
    Par tintin72 dans le forum Windows
    Réponses: 2
    Dernier message: 18/05/2008, 11h26
  5. Méthode pour créer une zone privée
    Par WagaSeb dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2007, 22h23

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