PDA

Visualizza la versione completa : [ALGORITMO] Generare un mumero univoco


znick
15-11-2006, 15:58
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

devil89
15-11-2006, 16:06
Mi sembra una sciocchezza..

per esempio, se ti viene dato il numero n, lo elevi al quadrato e ottieni un altro numero che è ottenuto dal precedente e non da nessun altro.

Forse ho capito male.

znick
15-11-2006, 16:15
no, mi sono spiegato male io!

ho bisogno di una specie di "codifica"

data una chiave mi generi un numero che non sia facilmente riconducibile alla chiave.
il procedimento però deve essere reversibile e univoco.

l'elevamento a potenza è un'idea, ma è troppo facilmente decodificabile

devil89
15-11-2006, 16:46
Potresti usare l'algoritmo RSA, che è un algoritmo asimmetrico; quindi c'è una chiave che codifica e una che decodifica.

Le chiavi solitamente hanno una dimensione di 1024 bits, ma può capitare che vengano utilizzare chiavi da 2024 adirittura.

L'algoritmo di RSA:

Creare la coppia di chiavi, codificare, decodificare
---------------------------------------------------
L'algoritmo per creare la coppia di chiavi è il seguente:

p = numero primo
q = numero primo
n = p*q
f(n) = (p-1)*(q-1)
e = primo rispetto f(n)
d = e ^ -1 mod f(n)
chiave pubblica = {n, e}
chiave privata = {n, d}

La codifica si fa così:

C = M ^ e mod n

La decodifica così:

M = C ^ d mod n

Per essere efficiente i numeri p e q devono essere molto grandi.

mettiamo caso che venga fuori 42(42 è il messaggio in chiaro numerico), quindi, per prima cosa generi le chiavi:

p = 7
q = 13
n = 7*13 = 91
f(n) = 6 * 12 = 72
e = primo riepstto a f(n) =5
d = 5 ^ -1 mod 72 = 29
chiave pubblica = {91, 5}
chiave privata = {91, 29}

codifichi:

M = 42
C = 42 ^ 5 mod 91 = 130691232 mod 91 = 35
C = 35

Quindi sapremo che un intero che rappresenta il cifrato è 35.

Per decifrare si ottiene

C = 35
M = 35 ^ 29 mod 91 = 5.997541836x10^44 mod 91 = 42

Per risolvere questo In Java esiste la classe BigInteger C++ c'è il template complex ad esempio e così via.


Comunque puoi trovare la spiegazione su questo algoritmo anche qua:
http://sicurezza.html.it/guide/lezione/2384/la-crittografia-a-chiave-pubblica-e-rsa/

MItaly
15-11-2006, 17:17
Ma in sostanza ti serve un algoritmo di hashing?

Loading