Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Crittare un numero?

Ciao a tutti!
Ho una piccola domanda: devo crittare un numero di 7 cifre (tramite
password). Il problema è che devo ottenere un altro numero, non una stringa.
Da questo numero ottenuto (sempre di 7 cifre) non si deve poter risalire al
numero originale, se non si è in possesso della password.
Qualcuno ha qualche idea/algoritmo per una possibile implementazione? Ho
sempre crittato stringhe, mai numeri; il problema è che il risultato
dell'operazione deve essere un numero, non una stringa.
Grazie,
Paolo

dell'operazione deve essere un numero, non una stringa.
Beh, un numero di 7 cifre ci sta in un long.
Prendi il long, lo copi in una String * 4 (o un array(1 to 4) As byte) lo
crypti, e il risultato lo ributti in un long.
E il gioco č fatto.
Questo ovviamente presume che l'algoritmo di cryptazione non modifica la
lunghezza dei dati cryptati.
Ciao

Non capisco queste difficoltà trattandosi di un long.
Perchè non lo complementi con un OR-esclusivo, o qualsiasi funzione
matematica che ti consenta di ottenere il numero originale.
x è il long originale -> y=f(x) è il numero criptato -> x=f'(y)
Non so... potrebbe essere un idea...?
Paolo Ferraresi.

 Non so... potrebbe essere un idea...?
Ci avevo pensato, ma avrei bisogno di una funzione che non mi faccia
superare il limite delle 7 cifre. Il numero deve sempre essere di 7 cifre.
Inoltre devo far vedere all'utente finale una sequenza di questi numeri
crittati (ogni valta maggiorato di 1), per cui potrebbe capire quale è la
funzione. Mi spiego: se non ci fosse la routine che critta i dati, l'utente
vedrebbe:
0000000
0000001
0000002
....
E' chiaro che se trovo una funzione semplice può farmi intuire il
procedimento. Cioè se scegliessi y=x+1 avrei:
0000001
0000002
0000003
...
Dato che l'utente sa che tra un numero e il successivo c'è una differenza di
1, risalirebbe con facilità ai numeri originali. Avrei bisogno di una
funzione particolare che modificherebbbe radicalmente i numeri, tipo (metto
numeri a caso):
1589526
9587451
5126854
....
In questo modo, osservando questi numeri, l'utente non riuscirebbe mai a
tornare ai numeri originali, pur sapendo che c'è una differenza di 1 tra
ogni numero (questo lo sa sempre, è un'opzione predefinita nel mio
programma).
Cosa intendi per OR esclusivo?
Grazie,
Paolo

 crypti, e il risultato lo ributti in un long.
Il problema č proprio l'algoritmo che critta il numero (o il numero ridotto
a stringa, nel tuo caso). Deve restituire un altro numero, non stringa. Un
numero dal quale sia impossibile ritornare all'originale, anche confrontando
diversi numeri crittati.
Ciao,
Paolo

Cosa intendi per OR esclusivo?
L'idea di Paolo potrebbe essere valida se puoi scegliere l'algoritmo di
criptazione.
L'or esclusivo (Xor) "gira" i bit di un byte rendendo il significato del
byte completamente differente da quello originale.
Il bello è che applicando lo stesso sistema al byte criptato tutto torna
normale.
L'algoritmo di una complessità incredibile è:
ValoreCryptato = ValoreOriginale Xor NumeroACaso
e il reverse lo ottieni con
ValoreOriginale = ValoreCryptato Xor NumeroACaso
(!) attento a non confondere però i Long con i tuoi "numeri a sette cifre"
che sembrerebbe siano stringhe.
Se li tratti come Long basta che il tuo valore di Xor non superi la settima
cifra (<=999999).
Se li tratti come stringhe puoi farci uno Xor byte a byte (magari con valori
differenti per ogni byte)
Capito?
Ciao

 wrote in message
news:ZpYc6.12913$L94.1...@twister2.tin.it...


 ....
Grazie per il codice; adesso lo provo, per vedere che cosa restituisce
(stringa? numero > 7?).
Paolo