Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cryptographie (Hashage)

Generate a WIF Key

Sujet résolu
Anonyme
    16 juin 2021 à 20:10:15

    Bonjour à vous.
    Je dois déterminer un checksum d'un double sha-256 (hash) en QT.
    J'ai donc :
    QString generateCheckSum(QString text)
    {
    QString privHex = QString(QCryptographicHash::hash((text.toUtf8()), QCryptographicHash::Sha256).toHex());
    
    qDebug() << privHex //9172e8eec99f144f72eca9a568759580edadb2cfd154857f07e657569493bc44
    }
    
    //
    generateCheckSum("Bonjour");
    
    J'ai remarqué sur un schéma le checksum : 4739A585
    On a le "A", ce qui signifie que ce n'est pas que un int... Mais pour mon message Bonjour en sha-256, je cherche à obtenir le même checksum 4739A585 (ce checksum est le bon c'est avec le même message : "Bonjour"). Comment puis-je y remédier ?

    Cordialement.

    -
    Edité par Anonyme 17 juin 2021 à 13:49:09

    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2021 à 22:28:32

      Bonjour,

      Il existe plusieurs manière d'écrire un nombre. On a l'habitude d'écrire et de nommer les nombres en utilisant le système décimal basé sur les dix chiffres 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Prenons le nombre entier que l'on écrit 1194960261; On peut aussi décider de l'écrire en utilisant le système hexadécimal (on a alors besoin d'utiliser 16 chiffres différents que l'on écrit : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F.)

      unsigned int nombre = 1194960261;
      std::cout << std::hex << nombre << std::endl; // Je veux l'afficher en hexadécimal
      // => 4739A585
      std::cout << std::dec << nombre << std::endl; // Je veux revenir à un affichage décimal

      L'ordinateur lui préfère mémoriser ce nombre entier dans le système binaire. Donc l'entier est alors plutôt sous la forme 01000111001110011010010110000101 où on voit bien qu'un entier est souvent constitué de 32 bits, la plupart des fonctions nous le retourneront en notation décimale 1194960261 plus concise, et la notation hexadécimale 4739A585 l'est encore plus.

      -
      Edité par Dalfab 16 juin 2021 à 22:32:27

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        17 juin 2021 à 7:32:43

        Bonjour,

        Pour ta premier question: pourquoi 'A',le porcedure toHex() te retourne un int au format hexadecimal 0-9 suivie  A-F pour chaque digit.

        Je ne comprends pas ta seconde question.

        Cordialement

        -
        Edité par Dedeun 17 juin 2021 à 7:34:24

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 juin 2021 à 13:55:53

          Bonjour, initialement je voudrai créer une clef WIF...
          Je m'y prend comme la sorte : https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch04.html

          J'ai donc fait ceci :

          QString generateRandomPrivateKey(QString text)
          {
              /*
               * Generate a private key in hexa
               */
              QByteArray payload = QCryptographicHash::hash((text.toUtf8()), QCryptographicHash::Sha256).toHex();
          
              /*
               * Generate a WIF private key
               * A WIF private key is composed of 4 parts :
               * Version (80 maintest format) + payload (privKey in hexa) + compressionFlag (01/00) + checkSum (4th bytes of the double sha256 of the version and the payload)
               */
              QByteArray wifPrivKey = "80" + payload + "01" + "4739a585";
              qDebug() << wifPrivKey;
          
              /*
               * Get the content of the WIF private key in hexa
               */
              QByteArray WIFPrivateKeyContent = QByteArray::fromHex(wifPrivKey);
          
              /*
               * return the WIF private key encoded in base58
               */
              encodeBase58 finalPrivKey(WIFPrivateKeyContent.toStdString());
              return finalPrivKey.output.c_str();
          }

          J'ai bien sûr ma fonction a moi de base58 qui fonctionne parfaitement...
          donc je génère la clef et j'obtiens : y9KVLbFYRVhhanXYhwq5jKbE1hfevAf8BhgXCoNGkacQv7KvEQXdQns6 (inerrant de l'hex 809172e8eec99f144f72eca9a568759580edadb2cfd154857f07e657569493bc44014739a585)

          Seulement, d'après le site une clef non compressé commence par 5... et non par y...
          De plus, si je decode ma base58, et que j'encode en hex ça sera pas le même hex (ça sera pas 809172e8eec99f144f72eca9a568759580edadb2cfd154857f07e657569493bc44014739a585)
          Je voudrai savoir ce que vous pensez de ça ... dites moi comment je peux faire car il y a un petit problème...

          Cordialement.

          • Partager sur Facebook
          • Partager sur Twitter

          Cryptographie (Hashage)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown