:D неа, длина md5 хэша равна 16 байт.(у md5 всегда 32 символа)?
32 эт в виде хекса, тобиш "%02x" что в два раза больше
char* seek[32]; переводи в бинарный формат unsigned char * seek[16];
:D неа, длина md5 хэша равна 16 байт.(у md5 всегда 32 символа)?
Код: Выделить всё
static char x2c(char *hex) {
register char digit;
digit = ((hex[0] >= 'A') ? ((hex[0] & 0xdf) - 'A')+10 : (hex[0] - '0'));
digit *= 16;
digit += (hex[1] >= 'A' ? ((hex[1] & 0xdf) - 'A')+10 : (hex[1] - '0'));
return(digit);
}
void bin2hex(char * hexbuffer, unsigned char * binary, size_t len) { // arg3 (size_t len) - length of arg2
for (int i=0; i<len; i++)
sprintf(&hexbuffer[i*2], "%02x", binary[i]);
}
void hex2bin(unsigned char * binarybuffer, char * hex, size_t len) { // arg3 (size_t len) - length of arg2
for (int i=0; i<len/2; i++)
binarybuffer[i] = x2c(&hex[i*2]);
}
char * hexstring = new char[32];
bin2hex(hexstring, md5hash, 16);
cout << hexstring << endl;
unsigned char binary[ 16 ];
binary[16] = '\0';
hex2bin(binary, hexstring, 32);
cout << binary << endl;
Есть быстрый способ перевести из hex в dec?
f8 => 248
99 => 153
Или по старинке - руками?
Код: Выделить всё
strtoul("f8", NULL, 16); // return 248;
strtoul("99", NULL, 16); // return 153;.
// или x2c();
Код: Выделить всё
char *md5(const char *data)
{
unsigned char md5[17]; //raw md5 hash
char *hash=NULL; //hex md5 hash like 98c7d35f011444b7d523bcb4bbf6867e
MD5_CTX md5handler;
MD5_Init(&md5handler);
MD5_Update(&md5handler,data,strlen(data));
MD5_Final(md5,&md5handler);
if (hash) delete [] hash;
hash=(char*)realloc((void*)hash,33);
for (int i=0;i<16;++i) {
sprintf (hash + 2*i, "%02x", md5[i]);
};
return hash;
}