PDA

View Full Version : [Algoritmo] Generare un numero univoco partendo da una chiave


znick
15-11-2006, 14:59
Ciao a tutti,

ho necessità di trovare un algoritmo che, data una chiave (numerica) mi generi un numero univoco

per esempio: dato il numero "4584" mi dia in uscita "1475487". E devo essere in grado di rifare il processo inverso, ovvero, dato "1475487", mi torni a dare "4584".

qualcuno ha idee (o anche solo link) su dove partire per una ricerca simile?

grazie in anticipo

andbin
15-11-2006, 15:20
ho necessità di trovare un algoritmo che, data una chiave (numerica) mi generi un numero univoco

per esempio: dato il numero "4584" mi dia in uscita "1475487". E devo essere in grado di rifare il processo inverso, ovvero, dato "1475487", mi torni a dare "4584".Dovresti spiegare a cosa ti serve (così capiamo meglio) e che relazione ci deve essere tra i due numeri.
Cioè nel tuo esempio che relazione c'è (o ci dovrebbe essere) tra 4584 e 1475487??

beppegrillo
15-11-2006, 15:39
beh potresti iniziare a vedere come lavora una funzione hash.

andbin
15-11-2006, 15:50
beh potresti iniziare a vedere come lavora una funzione hash.Già ... ma le funzioni hash non sono invertibili e possono collidere. Lui invece vuole poter fare anche il contrario e quindi, in tal caso, non deve nemmeno collidere. :rolleyes:

znick
15-11-2006, 16:33
Dovresti spiegare a cosa ti serve (così capiamo meglio) e che relazione ci deve essere tra i due numeri.
Cioè nel tuo esempio che relazione c'è (o ci dovrebbe essere) tra 4584 e 1475487??

mi serve per fare un semplice algoritmo di crittografia, che però sia solo in numeri decimali.

io voglio che l'utente mi immetta nel programma (una pagina web) il numero 4584 . Ma io lo voglio salvare "cifrato" sul database, metterci per esempio "1475487". e da 1475487 voglio poter tornare a ricavare l'originario 4584.

so che non è molto chiaro, ma spero di essermi spiegato un po' meglio

beppegrillo
15-11-2006, 16:44
mi serve per fare un semplice algoritmo di crittografia, che però sia solo in numeri decimali.

io voglio che l'utente mi immetta nel programma (una pagina web) il numero 4584 . Ma io lo voglio salvare "cifrato" sul database, metterci per esempio "1475487". e da 1475487 voglio poter tornare a ricavare l'originario 4584.

so che non è molto chiaro, ma spero di essermi spiegato un po' meglio
beh per iniziare potresti vedere http://en.wikipedia.org/wiki/MD5 è biunivoco però non garantisce nè la totale riservatezza nè la mancanza di collisioni.

cionci
15-11-2006, 16:47
Che senso ha salvarlo cifrato ? Hai qualche problema di sicurezza del database ?

Solitamente le password si salvano tramite un fingerprint MD5 o, meglio, SHA1...
Quando l'utente immette la password sul sito applichi nuovamente l'algoritmo di hash e lo confronti con il risultato salvato nel database...

PS: visto che parli di cifrare, probabilmente esistono già cifrari implementati nel linguaggio server side che usi per il sito web...

andbin
15-11-2006, 16:49
beh per iniziare potresti vedere http://en.wikipedia.org/wiki/MD5 è biunivoco però non garantisce nè la totale riservatezza nè la mancanza di collisioni.Eh no, MD5 non è biunivoco!! Se fosse biunivoco, non colliderebbe.

cionci
15-11-2006, 16:53
beh per iniziare potresti vedere http://en.wikipedia.org/wiki/MD5 è biunivoco però non garantisce nè la totale riservatezza nè la mancanza di collisioni.
Come fa ad essere biunivoco se ci sono collisioni ? Poi è automatico che non sia biunivoco: il dominio è formato da infiniti valori, mentre il codominio da 2^128...

beppegrillo
15-11-2006, 17:02
avete perfettamente ragione, ricordavo male :\

PGI-Bis
15-11-2006, 17:03
Le funzioni di hashing possono benissimo essere invertibili, anche le funzioni di hasing crittografico solo che, in quest'ultimo caso, è sperabile che sia di gran lunga più oneroso ricavare i dati originali a partire dalla funzione di hashing e dal codice hash che non produrre il codice hash a partire dai dati e dalla funzione.

E possono anche non collidere tanto che in quel caso si parla di funzioni di hashing perfetto, non di "funzioni che siccome non producono collisioni non sono di hashing".

znick
16-11-2006, 08:15
sono talmente ignorante che non avevo associato l'MD5 (che so a grandi linee cosa sia) a qualcosa che posso utilizzare!

grazie per l'aiuto!

cionci
16-11-2006, 08:34
Sì, ma l'MD5 lo puoi usare solo come ti ho detto sopra...in quanto non è invertibile. Ad esempio non si può recuperare un password MD5 salvata su un DB, ma con un eventuale procedura di recupero della password persa devi inviare una nuova password generata casualmente alla mail relativa all'utente.