summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic GUEGAN <loic@debian>2015-03-07 19:59:15 +0400
committerLoic GUEGAN <loic@debian>2015-03-07 19:59:15 +0400
commitbbfdf67777b9f78bdd5592b863d93b0448ce2fd3 (patch)
tree2eb8d268fbdd24288101653036c3c2dfd6ad0eb6
parent80261321e887e2d8ffb71173a517f4e50c8ce93a (diff)
Classe HASHCrypt totalement revue et pensée.
-rw-r--r--CryptClass/HASHCrypt.cpp86
-rw-r--r--CryptClass/HASHCrypt.hpp33
-rw-r--r--main.cpp16
3 files changed, 80 insertions, 55 deletions
diff --git a/CryptClass/HASHCrypt.cpp b/CryptClass/HASHCrypt.cpp
index ec25bf6..d77ee05 100644
--- a/CryptClass/HASHCrypt.cpp
+++ b/CryptClass/HASHCrypt.cpp
@@ -1,11 +1,8 @@
#include "HASHCrypt.hpp"
-
//Constructeur
-HASHCrypt::HASHCrypt(std::string chain){
- this->MD5_32=this->initMD5_32(chain); //Initialisation MD5 sur 32bits
- this->MD5_128=this->initMD5_128(chain); //Initialisation MD5 sur 128bits
+HASHCrypt::HASHCrypt(){
}
@@ -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
+
+ Attention si size!=sizeof(digest) risque d'erreur de type Segmentation fault
+
+*/
+void HASHCrypt::getMD5_128(std::string chain, byte* digest, int size){
-//Retourne la somme de controle MD5 sur 32 bits
-std::string HASHCrypt::initMD5_32(std::string chain){
+ //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
+ //Calcule de la somme de controle MD5 dans un type byte* à partir du paramètre chain
CryptoPP::Weak1::MD5 hash;
- byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE ];
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;
- byte digest[ CryptoPP::Weak1::MD5::DIGESTSIZE * 4 ];
- hash.CalculateDigest( digest, (byte*) chain.c_str(), chain.length() );
+/*
+ chain : objet de type string à hacher à l'aide de l'algorithme SHA-256
+ 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
- //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();
+*/
+void HASHCrypt::getSHA_256(std::string chain, byte* digest, int size){
- //Retourne la sortie de la convertion
- return output;
+ //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() );
}
-//Getter MD5_32
-std::string HASHCrypt::getMD5_32(){
- return this->MD5_32;
+/*
+ size : contient la taille des données passer en paramètre à la méthode de hashage choisi
+*/
+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(){
- return this->MD5_128;
+/*
+ sizeRequired : Taille du disgest attendu
+ 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);
+ }
}
diff --git a/CryptClass/HASHCrypt.hpp b/CryptClass/HASHCrypt.hpp
index 6090c92..bf7ed95 100644
--- a/CryptClass/HASHCrypt.hpp
+++ b/CryptClass/HASHCrypt.hpp
@@ -1,20 +1,22 @@
//----- Includes std -----
-
+#include <iostream>
#include <string>
-
+#include <sstream>
//----- Includes crypto++ -----
-//Pour le calcule de la somme de controle MD5
+//Pour le calcule de la MD5
#include <crypto++/md5.h>
//Pour la convertion en hexadécimal et vice-versa
#include <crypto++/hex.h>
+//Pour l'utilisation de l'algorithme SHA
+#include <crypto++/sha.h>
/*----- Description -----
-Classe executant divers fonctions de hachage sur
-un paramètre donné à l'initialisation, ainsi celui-ci
-n'est présent en mémoire qu'à l'initialisation.
+Classe exécutant divers fonctions de hachage sur
+un paramètre donné à la méthode choisie.
+Gestion des exceptions.
Utilise la bibliothèque crypto++
*/
@@ -22,26 +24,25 @@ class HASHCrypt{
public:
//Constructeur
- HASHCrypt(std::string chain);
+ HASHCrypt();
//Destructeur
~HASHCrypt();
- std::string getMD5_32(); //Retourne MD5_32
- std::string getMD5_128(); //Retourne MD5_128
-
+ //Contruit un MD5 de 128 bits sur le tableau digest de taille size à l'aide de la chaine chaine.
+ 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:
- //Calcule de MD5 sur 32bits
- std::string initMD5_32(std::string chain);
- //Calcule de MD5 sur 128 bits
- std::string initMD5_128(std::string chain);
+ //Arrête le programme en cas de taille de Digest invalide et affiche une erreur.
+ 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
};
diff --git a/main.cpp b/main.cpp
index cb3bf44..fc3b22a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -15,9 +15,21 @@ void aff(std::string chaine);
//----- Program Start -----
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;