Scusa ma a cosa potrebbe servire questo programma/algoritmo, senza una chiave di cifratura? Non ha molto senso che io vada a criptare il testo di una email se poi chi la intercetta è in possesso dello stesso programma che ho usato io (visto che lo scarica dal tuo sito)! A parte questo... con una analisi attenta (e furba) dei dati criptati dal tuo programma si arriva un po' alla volta a capire il funzionamento del tuo algoritmo, senza essere spie al soldo del KGB!Senti un po...questa più che una domanda tecnica è una curiosità...ma se qualche persona si inventa un algoritmo di cifratura e pubblicandolo in internet(dopo svariati tentativi) risulta inattacabile, è possibile venderlo??Cioè ci sarebbe qualche persona o società che potrebbe essere disposto a comprarlo???
Ti spiego come ho fatto a risalire all'algoritmo da te usato:
Indizio 1: innanzitutto si nota che la lunghezza del file criptato è 5 volte maggiore del testo originario: il tuo algoritmo dunque calcola per ogni carattere un blocco numerico di cinque cifre.
Indizio 2: la seconda cifra di ogni blocco è "stranamente" sempre uguale a 1 o a 9, raramente uguale a 2 o a 3. Questo indizio è molto importante: delle cinque cifre del blocco, questa è la meno importante e riveste un ruolo marginale nella codifica.
Indizio 3: cifrando due volte di seguito lo stesso testo si nota che l'output non è mai lo stesso, questo indica che in ogni blocco è celato un numero random.
Verificati questi "indizi", ho cercato un nesso tra le cifre del blocco di un carattere (per esempio 'A') e il codice ASCII dello stesso (65). Dopo un po' di tentativi, mettendo a confronto diversi blocchi per il medesimo carattere, ho trovato il procedimento di codifica che ora vado a sintetizzare:
r = numero random compreso tra 10 e 99 (due cifre, rd=decine e ru=unità)
c = codice ASCII del carattere da criptare
s = r + c
se s < 100 allora s = s + 900
blocco = rd & s & ru
Esempio di codifica: carattere A
r = 87
c = 65
s = 87 + 65 = 152
blocco = 81527
-----
Per la decodifica:
dato un blocco = k4 k3 k2 k1 k0
r = numero random = k4 * 10 + k0
s = k1 + k2 * 10 + k3 * 100
se (s - 900) > 0 allora s = s - 900
c = codice ASCII = s - r
Esempio di decodifica:
blocco = 81527
r = 8 * 10 + 7 = 87
s = 2 + 5 * 10 + 1 * 100 = 152
c = 152 - 87 = 65
carattere = Chr$(65) = "A"
-----
Mi sono permesso di "crackare" il tuo algoritmo certamente non per farti un dispetto ma perchè, come hai visto, con una serie di ragionamenti è possibile risalire rapidamente dal codice criptato al testo originale. Certo, non ci sarei riuscito senza aver fatto un po' di esperimenti con il tuo programma, ma è indubbio che menti ben più pesanti della mia sarebbero riusciti ugualmente nello scopo. Senza avere la pretesa di inventare un sistema inpenetrabile, con alcuni accorgimenti avresti potuto rendere l'algoritmo ben più sicuro. Il segreto è non dare punti di riferimento: per esempio, la lunghezza fissa del blocco oppure la presenza di particolari cifre sempre nella stessa posizione aiutano molto chi cerca di decriptare il tuo codice. Anche gli operatori logici OR, AND, XOR e le altre operazioni sui numeri binari ed esadecimali possono essere molto utili, ti consiglio pertanto di guardarti uno dei tanti siti internet che trattano l'argomento, oppure un buon libro.
Ciao

Rispondi quotando