Question

Avec un "nom de fichier de chaîne", comment puis-je obtenir la somme de contrôle Adler32 à l'aide de la bibliothèque C ++ Crypto ++. Je suis un peu confus quant à l’utilisation de leurs systèmes Source et Sink.

Ci-dessous, j'ai le squelette du code qui gère MD5, mais il semble que je ne trouve aucun exemple ni didacticiel sur l'utilisation d'Adler32.

string filename = "/tmp/data.txt"
string file_adler32_digest;
string file_md5_digest;

MD5 hashMD5;

FileSource fs( filename.c_str(), 
              true, 
              new HashFilter( hashMD5, 
              new HexEncoder( new StringSink( file_md5_digest ) ) ) );

/* Confusion begins here */   

//how do I do the adler32 ?

/* Confusion ends here */

cout << file_adler32_digest << endl
     << file_md5_digest << endl;

Bons exemples et exemples de code ici http://www.cryptopp.com/wiki/Category : Exemple pour tout le Crypto ++ (sauf pour le truc Adler32 que je veux)

Était-ce utile?

La solution

Si vous suivez cette http://www.cryptopp.com/wiki/HashFilter , vous devez changer hashMD5 pour hashAdler32 et file_md5_digest pour file_adler32_digest

Adler32 hashAdler32;

FileSource( filename.c_str(), 
            true, 
            new HashFilter( hashAdler32, 
            new HexEncoder( new StringSink( file_adler32_digest ) ) ) );

Après cela, fichier_adler32_digest devrait contenir le hachage souhaité.

Autres conseils

  

.. un peu confus quant à l'utilisation de leurs systèmes Source et Sink.

OK Cette conception particulière est inspirée du système de tuyaux Unix. Si vous comprenez les pipes Unix et comment les flux de données les traversent, alors vous comprenez le Crypto ++ Pipeline .

Par exemple, les commandes Unix suivantes:

cat somefile.bin | hexdump

deviendrait le programme Crypto ++ suivant:

FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));
  

J'ai le squelette du code qui fait MD5, mais j'ai besoin du code ... pour Adler32 ...

Comme Ismael vous l'a montré, c'est aussi simple que:

Adler32 adler32;
string digest;

FileSource fs(filename.c_str(),  true /*pumpAll*/, 
              new HashFilter(adler32, 
                    new HexEncoder(
                        new StringSink(digest))));

Mais voici l’information: dans Crypto ++, les flux de données vont de Sources à Eviers . Entre-temps, il rencontrera les filtres qui transforment les données.

ci-dessus, vous avez deux filtres: le HashFilter et le HexEncoder . Tous les filtres héritent d'une BufferedTransformation , afin qu'ils puissent tous être chaînés. ensemble de manière cohérente.

Adler32 n'est pas un filtre. Mais il hérite de HashTransformation et c'est ce que HashFilter utilise. Vous pouvez donc permuter n'importe quel objet HashFilter et tout ira bien.

Vous pouvez trouver une liste des objet basé sur HashFilter à Référence de la classe HashTransformation . Ils incluent tous les hachages (tels que MD5, SHA et Whirlpool), Adler32 et CRC32.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top