[C] Hashage MD5

Bonjour,

Je programme en C et je voudrais savoir comment hasher un mot en md5 ?

Merci bcp ^^
Configuration: Windows ... malheureusement ...

12 réponses

  1. Contributeur
    Si t'es sous Windows, utilise CryptoAPI.
    0
    1. Merci bcp ^^ Je teste
      0
      1. Mais il existe pas une fonction spécifique, je veux dire sans utiliser le main, du genre :

        char md5 (char acoder[]){
        
        blablabla ...
        
        return code;
        }
        
        int main (){
        
        md5(Bonjour);
        
        }


        ??
        0
        1. Contributeur
          Tu dois la créer toi-même.
          0
          1. Il y a un problème ... Je cherche une fonction de Hash md5 pour un char, pas pour un fichier ...
            0
            1. Personne n'a une fonction deja faite ??
              0
              1. Contributeur
                J'ai ça en C++ :
                #define WIN32_LEAN_AND_MEAN
                #define _CRT_SECURE_NO_WARNINGS
                #include <windows.h>
                #include <wincrypt.h>
                #include <stdio.h>
                
                char* GenericHash(unsigned int AlgId,char* Buffer, int lBuffer)
                {
                	HCRYPTPROV hProv; HCRYPTHASH hHash;
                	BYTE* Hash; DWORD lHash, len;
                
                	if (CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET))
                	{
                		if (CryptCreateHash(hProv,AlgId,0,0,&hHash))
                		{
                			if (CryptHashData(hHash,(BYTE*)Buffer,lBuffer,0))
                			{
                				if (CryptGetHashParam(hHash,HP_HASHSIZE,(BYTE*)&lHash,&len,0))
                				{
                					Hash = new BYTE[lHash];
                					if (!Hash) return NULL;
                					if (!CryptGetHashParam(hHash,HP_HASHVAL,Hash,&lHash,0))
                					{
                						delete[] Hash;
                						return NULL;
                					}
                				}
                			}
                			else return NULL;
                		}
                		else return NULL;
                	}
                	else return NULL;
                
                	CryptDestroyHash(hHash);
                	CryptReleaseContext(hProv,0);
                
                	char* sHash = new char[lHash*2+1]; memset(sHash,0,lHash*2+1);
                	for (unsigned char i = 0; i <= lHash-1; i++)
                	{
                		sprintf(sHash+(i*2),"%02X",Hash[i]);
                	}
                	delete[] Hash;
                	return sHash;
                }
                0
                1. > Mais il existe pas une fonction spécifique,
                  Si , il y a les apis MD5 sous Windows (cf chez les pros pour les exemple https://www.ovh.co.uk/mail/
                  0
                  1. Contributeur
                    C'est le code que j'ai montré.
                    Il suffit de recoder mon bout de programme en C, ça devrait pas être trop dur ...
                    0