Portál AbcLinuxu, 15. července 2025 01:41
Dobry den, jakym zpusobem mohu prosim v programu v jazyce C vytvorit z retezce MD5 hash?
Muzete mi prosim napsat kostru programu co zahashuje treba retezec "ahoj"? Nejsem v programovani moc zbehly. Dekuji.
Ja som si skusil osviezit znalosti z C a vzniklo to co je v prilohe.
Zkompiluje sa prikazom "gcc -lssl main.c"
#include <openssl/md5.h> #include <stdio.h> #include <string.h> int main(void) { char text[] = "ahoj"; unsigned char hash[16]; int i; MD5((unsigned char *) text, strlen(text), hash); for(i = 0; i < sizeof(hash); i++) printf("%02X", (int) hash[i]); putchar('\n'); return 0; }Přeložíš to příkazem
gcc -Wall -lssl jmeno_souboru.c
#include <openssl/md5.h> int main() { unsigned char * zahashovanyRetezec = MD5 ("ahoj",4,NULL); return 0; }
Dekuji obema - toto je prave to, cim jsem si nebyl jisty: Jaky je rozdil kdyz pouziji pouze funkci MD5() nebo kdyz pouziji sekvenci fci MD5_Init, MD5_Update a MD5_Final?
aniž vím z dokumentace, jaký rozdíl je, tak asi tuším - obecně, když se třeba dělá hash pár set MB dat (třeba hash ISO obrazu CD), tak nebudeš mít celý ISO obraz v paměti, ale budeš načítat po kouscích (třeba po 1MB), a připočítáš nějak k hashi předchozích částí hash právě načtené části pomocí MD5_Update (tzn. MD5_Update zavoláš třeba pársetkrát pro ten ISO obraz). Před prvním zavoláním MD5_Update zavoláš MD5_Init, aby si inicializoval výpočet, po posledním zavolání zavoláš MD5_Final, abys výpočet dokončil. Ale když máš málo dat (třeba řetězec, nebo malý soubor), tak bys MD5_Update volal jen jednou, a před tím bys musel zavolat MD5_Init a potom MD5_Final, takže abys tam neměl tolik omáčky, tak je pro tvé pohodlí ještě funkce MD5, která udělá přesně to, co jsem popsal, tedy 3 volání v jednom kroce, takže ty nemusíš tolik psát a je to přehlednější (ale nepoužitelné pro velká data).
vim ~/.emacs
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.