PDA

View Full Version : Generare hash di una stringa c/c++


pmhwp
07-07-2007, 10:01
Salve a tutti,
ho una stringa e vorrei generare l'hash di questa e confrontarla con un altra...

Come faccio?

Uso dev c++

Ciao.

cionci
07-07-2007, 10:06
L'hash non è una grandezza univoca, ci sono infiniti modi per calcolarlo...ad esempio un hash semplicissimo può essere quello composto da somma dei valori ascii dei caratteri che compongono la stringa diviso per la lunghezza della stringa...
La complessità dell'hash che vuoi calcolare dipende sempre da qual'è lo scopo per cui lo vuoi usare...quindi spiegaci meglio lo scopo di questo hash...

pmhwp
07-07-2007, 10:11
Devo fare un programmino per un esame.

Allora vorrei fare questo:
All'apertura del programma l'utente inserisce una password...
Questa password è memorizzata in un file...

La password pero vorrei salvarla su file come hash e quindi confrontare l'hash salvato con l'hash della password inserita...

Ciao.

cionci
07-07-2007, 10:31
Allora ti serve un hash bello potente in cui le collisioni possibili siano minime...

Per una hashtable ad esempio ti sarebbe bastato anche un hash come quello che ti ho detto sopra...

Hai due scelte:
- te lo crei da solo (mi sa che non ti conviene)
- vai a prendere il codice di qualche hash noto (md5 o sha1) o usi qualche libreria che te lo calcola

cionci
07-07-2007, 10:32
Questa applicazione deve girare su qualche sistema operativo in particolare o il codice deve compilare su sistemi operativi diversi ?

71104
07-07-2007, 12:23
se deve andare solo su Windows potresti usare le CryptoAPI, altrimenti qui c'è il codice di MD5: http://en.wikipedia.org/wiki/Md5

pmhwp
07-07-2007, 17:02
No no a me serve una cosa semplice...come md5
Io ricordo che si trovava ad esempio da prompt con un semplice comando...

Ciao.

cionci
07-07-2007, 19:01
md5 non è una cosa "semplice"...

Comunque facci sapere per quale sistema operativo ti serve...

pmhwp
07-07-2007, 20:05
Niente di che lo devo utilizzare in un semplice programmino in c/c++
su windows....sto utilizzando dev c++ come compilatore...

Ciao.

andbin
08-07-2007, 09:11
Niente di che lo devo utilizzare in un semplice programmino in c/c++Di implementazioni del MD5 in C o C++ ne trovi a bizzeffe in rete. Una la trovi pure nella RFC1321 (http://tools.ietf.org/rfc/rfc1321.txt).

pmhwp
08-07-2007, 09:20
Non ci sarebbe per caso una libreria dos o altro da poter includere e richiamare la funzione apposita?

Mi sembra che in dos o in linux basti dare il comando md5 da prompt...

Ciao.

andbin
08-07-2007, 09:37
Mi sembra che in dos o in linux basti dare il comando md5 da prompt...Beh, basta trovare la equivalente utility per Windows ....
http://www.google.it/search?hl=it&q=md5sum+win32&btnG=Cerca&meta=

cionci
09-07-2007, 08:07
Mi sembra che in dos o in linux basti dare il comando md5 da prompt...
No, non basta...non in tutte le distribuzioni è possibile, quindi non puoi contare su questo. In Windows men che meno...
Scusa, ma che ti ci vuole ad aggiungere l'implementazione di md5 al tuo progetto ? Basta prenderti il codice che ti ha passato andbin, lo emtti nei rispettivi file (tutti tranne mddriver.c)...
Dopo ti basta includere il .h e ti definisci una funzione come questa:

static void MD5String (string)
char *string;
{
MD5_CTX context;
unsigned char digest[16];
unsigned int len = strlen (string);

MD5Init (&context);
MD5Update (&context, string, len);
MD5Final (digest, &context);

printf ("MD%d (\"%s\") = ", MD, string);
MD5Print (digest);
printf ("\n");
}

Ovviamente devi modificare il codice per ritornare la stringa invece di stamparla...
Già finito e già pronto...