string als MD5-Hash ausgeben...



  • Hab ein code gefunden der dateien öffnet und dann den MD5 Hash Wert der datei anzeigt:

    string MD5(string file)
    {
    	#define FILE_BUF_SIZE 1024
    	#define HT_MD5     4
    
    	int hashes = 0; 
    	char *fname = NULL;                // will point to filename specified in argv
    	FILE *f = NULL;                    // file access
    	unsigned char buf[FILE_BUF_SIZE];  // file access
    	unsigned int bytesread;            // file access
    
    	MD5_CTX val_md5;  
    	unsigned char md5digest[16];
    
    	MD5Init(&val_md5);
    
    	hashes |= HT_MD5;
    
    	fname = cvt.StringToChar(file);
    
    	if ((f = fopen(fname, "rb")) != NULL)
    	{
    		do
    		{
    			// reading to buffer
    			bytesread = fread(buf, 1, FILE_BUF_SIZE, f);
    
    			// updating hash vars
    			if (hashes & HT_MD5) MD5Update(&val_md5, buf, bytesread);
    		}
    		while (bytesread == FILE_BUF_SIZE);
    		fclose(f);
    	} 
    	else 
    	{
    		string str = "Fehler: Auf Datei <" + file + "> kann nicht zugegriffen werden!";
    		return str;
    	}	
    
    	MD5Final(md5digest, &val_md5);
    
    	string str;
    
    	if (hashes & HT_MD5)
    	{
    		MD5ToString((char *)md5digest, (char *)buf);
    		//printf("MD5 = %s\n", buf);
    		str = "MD5 = ";
    		str += (char*)buf;
    		return str;
    	}
    	return str;
    }
    

    ...Doch ich möchte nur das ich ein normalen string in ein MD5 Hash wert umwandeln wie z.B. string s = "test" <--- diesen string als Hash wert haben, ist das möglich mit der obigen funktion.

    PS. Es gibt noch die md5.h



  • MD5Update(&val_md5, "test", 4);



  • Danke für die schnelle Hilfe 😃

    Beim zweiten Parameter wird ein 'unsigned char *' erwartet, wie kann ich ein string
    hier umwandeln damit es funktioniert?



  • Mit

    string MeinString;
    MeinString.c_str();
    

    bekommst einen const char *.
    wahrscheinlich nimmt er ihn nicht an drum buffer allozieren rein schreiben und dann den buffer übergeben :D. 😉



  • reinterpret_cast<unsigned char*>("test")



  • Da haste Recht mit MeinString.c_str();

    Hab es so gelöst:

    char test[50];
    			strcpy(test, file.c_str());
    			if (hashes & HT_MD5) MD5Update(&val_md5, (unsigned char*)test, file.length());
    

Anmelden zum Antworten