Classe HASHCrypt totalement revue et pensée.
This commit is contained in:
parent
80261321e8
commit
bbfdf67777
3 changed files with 81 additions and 56 deletions
|
@ -1,11 +1,8 @@
|
||||||
#include "HASHCrypt.hpp"
|
#include "HASHCrypt.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Constructeur
|
//Constructeur
|
||||||
HASHCrypt::HASHCrypt(std::string chain){
|
HASHCrypt::HASHCrypt(){
|
||||||
this->MD5_32=this->initMD5_32(chain); //Initialisation MD5 sur 32bits
|
|
||||||
this->MD5_128=this->initMD5_128(chain); //Initialisation MD5 sur 128bits
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,52 +11,67 @@ HASHCrypt::~HASHCrypt(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
chain : objet de type string à hacher à l'aide de l'algorithme MD5
|
||||||
|
digest: tableau de type byte* contenant les données hasher
|
||||||
|
size: int faisant référence à la taille du tableau
|
||||||
|
|
||||||
//Retourne la somme de controle MD5 sur 32 bits
|
Attention si size!=sizeof(digest) risque d'erreur de type Segmentation fault
|
||||||
std::string HASHCrypt::initMD5_32(std::string chain){
|
|
||||||
|
|
||||||
//Calcule de la somme de controle MD5 dans un type byte à partir du paramètre chain
|
*/
|
||||||
|
void HASHCrypt::getMD5_128(std::string chain, byte* digest, int size){
|
||||||
|
|
||||||
|
//Contrôle de la taille du digest
|
||||||
|
this->checkDigestSize(CryptoPP::Weak1::MD5::DIGESTSIZE,size);
|
||||||
|
|
||||||
|
//Calcule de la somme de controle MD5 dans un type byte* à partir du paramètre chain
|
||||||
CryptoPP::Weak1::MD5 hash;
|
CryptoPP::Weak1::MD5 hash;
|
||||||
byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE ];
|
|
||||||
hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() );
|
hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() );
|
||||||
|
|
||||||
//Convertion du hash en std::string
|
|
||||||
CryptoPP::HexEncoder encoder;
|
|
||||||
std::string output;
|
|
||||||
encoder.Attach( new CryptoPP::StringSink( output ) );
|
|
||||||
encoder.Put( digest, sizeof(digest) );
|
|
||||||
encoder.MessageEnd();
|
|
||||||
|
|
||||||
//Retourne la sortie de la convertion
|
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Retourne la somme de controle MD5 sur 128 bits
|
|
||||||
std::string HASHCrypt::initMD5_128(std::string chain){
|
|
||||||
|
|
||||||
//Calcule de la somme de controle MD5 dans un type byte à partir du paramètre chain
|
/*
|
||||||
CryptoPP::Weak1::MD5 hash;
|
chain : objet de type string à hacher à l'aide de l'algorithme SHA-256
|
||||||
byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE * 4 ];
|
digest: tableau de type byte* contenant les données hasher
|
||||||
|
size : int faisant référence à la taille du tableau
|
||||||
|
|
||||||
|
Attention si size!=sizeof(digest) risque d'erreur de type Segmentation fault
|
||||||
|
|
||||||
|
*/
|
||||||
|
void HASHCrypt::getSHA_256(std::string chain, byte* digest, int size){
|
||||||
|
|
||||||
|
//Contrôle de la taille du digest
|
||||||
|
this->checkDigestSize(CryptoPP::SHA256::DIGESTSIZE,size);
|
||||||
|
|
||||||
|
//Calcule du SHA-256 dans un type byte* à partir du paramètre chain
|
||||||
|
CryptoPP::SHA256 hash;
|
||||||
hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() );
|
hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() );
|
||||||
|
|
||||||
//Convertion du hash en std::string
|
|
||||||
CryptoPP::HexEncoder encoder;
|
|
||||||
std::string output;
|
|
||||||
encoder.Attach( new CryptoPP::StringSink( output ) );
|
|
||||||
encoder.Put( digest, sizeof(digest) );
|
|
||||||
encoder.MessageEnd();
|
|
||||||
|
|
||||||
//Retourne la sortie de la convertion
|
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Getter MD5_32
|
/*
|
||||||
std::string HASHCrypt::getMD5_32(){
|
size : contient la taille des données passer en paramètre à la méthode de hashage choisi
|
||||||
return this->MD5_32;
|
*/
|
||||||
|
std::string HASHCrypt::getInvalidDigestSizeError(int sizeRequired, int size){
|
||||||
|
std::ostringstream erreurStream;
|
||||||
|
erreurStream << "Taille de digest invalide ! ("<< sizeRequired <<" octets requis et "<< size <<" donner)";
|
||||||
|
return erreurStream.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Getter MD5_128
|
/*
|
||||||
std::string HASHCrypt::getMD5_128(){
|
sizeRequired : Taille du disgest attendu
|
||||||
return this->MD5_128;
|
size : Taille du digest donné
|
||||||
|
*/
|
||||||
|
void HASHCrypt::checkDigestSize(int sizeRequired, int size){
|
||||||
|
try{
|
||||||
|
if(size !=sizeRequired){
|
||||||
|
throw this->getInvalidDigestSizeError(sizeRequired, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(std::string erreur){
|
||||||
|
std::cerr << erreur <<std::endl;
|
||||||
|
std::exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
//----- Includes std -----
|
//----- Includes std -----
|
||||||
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
//----- Includes crypto++ -----
|
//----- Includes crypto++ -----
|
||||||
|
|
||||||
//Pour le calcule de la somme de controle MD5
|
//Pour le calcule de la MD5
|
||||||
#include <crypto++/md5.h>
|
#include <crypto++/md5.h>
|
||||||
//Pour la convertion en hexadécimal et vice-versa
|
//Pour la convertion en hexadécimal et vice-versa
|
||||||
#include <crypto++/hex.h>
|
#include <crypto++/hex.h>
|
||||||
|
//Pour l'utilisation de l'algorithme SHA
|
||||||
|
#include <crypto++/sha.h>
|
||||||
|
|
||||||
|
|
||||||
/*----- Description -----
|
/*----- Description -----
|
||||||
Classe executant divers fonctions de hachage sur
|
Classe exécutant divers fonctions de hachage sur
|
||||||
un paramètre donné à l'initialisation, ainsi celui-ci
|
un paramètre donné à la méthode choisie.
|
||||||
n'est présent en mémoire qu'à l'initialisation.
|
Gestion des exceptions.
|
||||||
Utilise la bibliothèque crypto++
|
Utilise la bibliothèque crypto++
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -22,26 +24,25 @@ class HASHCrypt{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//Constructeur
|
//Constructeur
|
||||||
HASHCrypt(std::string chain);
|
HASHCrypt();
|
||||||
|
|
||||||
//Destructeur
|
//Destructeur
|
||||||
~HASHCrypt();
|
~HASHCrypt();
|
||||||
|
|
||||||
std::string getMD5_32(); //Retourne MD5_32
|
//Contruit un MD5 de 128 bits sur le tableau digest de taille size à l'aide de la chaine chaine.
|
||||||
std::string getMD5_128(); //Retourne MD5_128
|
void getMD5_128(std::string chain, byte* digest, int size);
|
||||||
|
|
||||||
|
|
||||||
|
//Contruit un SHA de 256 bits sur le tableau digest de taille size à l'aide de la chaine chaine.
|
||||||
|
void getSHA_256(std::string chain, byte* digest, int size); //Retourne SHA_256
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//Calcule de MD5 sur 32bits
|
|
||||||
std::string initMD5_32(std::string chain);
|
|
||||||
|
|
||||||
//Calcule de MD5 sur 128 bits
|
//Arrête le programme en cas de taille de Digest invalide et affiche une erreur.
|
||||||
std::string initMD5_128(std::string chain);
|
void checkDigestSize(int sizeRequired, int size);
|
||||||
|
|
||||||
|
//Assemble et retourne les messages d'erreurs de type : InvalidDigestSizeError
|
||||||
|
std::string getInvalidDigestSizeError(int sizeRequired, int size);
|
||||||
|
|
||||||
std::string MD5_32; //Attribut MD5 sur 32bits
|
|
||||||
std::string MD5_128; //Attribut MD5 sur 128 bits
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
16
main.cpp
16
main.cpp
|
@ -15,9 +15,21 @@ void aff(std::string chaine);
|
||||||
//----- Program Start -----
|
//----- Program Start -----
|
||||||
int main(){
|
int main(){
|
||||||
|
|
||||||
HASHCrypt hash= HASHCrypt("Chaine de test");
|
|
||||||
|
|
||||||
aff(hash.getMD5_128());
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HASHCrypt hash= HASHCrypt();
|
||||||
|
|
||||||
|
byte code[16];
|
||||||
|
|
||||||
|
hash.getMD5_128("Phrase de test !", code, sizeof(code));
|
||||||
|
|
||||||
|
for(int i=0; i<16;i++){
|
||||||
|
std::cout << code[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue