Allora legend pesavo di dover sospendere invece anche se a rilento possiamo procedere.
Lo script che realizzeremo è abbastanza complesso , la prima parte sara dedicata alal creazione
degli archivi virtuali che dovranno rispettare le caratteristiche che avevo gia spiegato.
Avevamo detto che per creare gli archivi virtuali potevamo pure usare l'algoritmo di mirapep
ma a ben guardare quell'algoritmo crea solo un achivio casuale , non rispetta il punto in cui
si diceva che il seme deve essere preso dal corrispetivo numero dell'estrazione reale , questa
caratteristica invece è fondamentale per poter porre in gioco i numeri,
A te avevo detto di provare a pensare ad un sistema e mi fa piacere che tu lo abbia fatto.
Pero nello script che faremo useremo invece la proposta fatta da me.
L'algoritmo che ho pensato ineffetti non è nuovo e prende come spunto le routine di crittografia dei dati.
Non tutti sanno che la prima pietra miliare per la costruzione dei computer fu messa da un matematico inglese durante la seconda guerra mondiale , tale matematico era a capo dell'ufficio
incaricato di decriptare i comunicati tedeschi codificati con la famosa macchina enigma.
Quando si cripta un messaggio si deve stare bene attenti a fare in modo che a tale lettera
non corrisponda sempre la stessa una volta criptata.
Quanti da bambini hanno giocato con l'alfabeto segreto dove per convenzione si usava una tabellina
di decodifica dove ad ogni carattere ne corrispondeva in realtà un altro ..quello era un metodo molto ingenuo facilmente attaccabile
ora per dare un'idea del metodo che useremo per creare gli archivi virtuali faremo proprio un esempio
crittografico che usa un algoritmo dove ad ogni carattere del testo da criptare ne puo corrispondere sempre uno diverso rendendo molto piu difficile da decrittazzione.
A noi ci interessa molto il fatto che a tale carattere ne possa corrispondere sempre uno diverso
perche è proprio la caratteristica richiesta dall'archivio virtuale che diceva che al tale numero reale non deve sempre corrispondere lo stesso numero virtuale ma ci deve essere una solida regola per ottenerlo.
, segue il codice ... guardalo bene legend perche è da questo che prenderemo spunto per i nostri archivi virtuali ,,
Codice:
Option Explicit
Sub Main
Dim sChars
Dim sPassword
Dim sTesto,sTestoCrypt,sChr,sChrMask,sChrCryp
Dim k,i,ii,iMask,nLenPwd,nLenChars,iPos
' elenco dei caratteru possibili charset
sChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 "
' testo da cryptare
sTesto = "Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,che la diritta via era smarrita"
' password
sPassword = "paperino"
' richieste all'utente
sTesto = InputBox("Inserire un testo segreto","Messaggio da criptare",sTesto)
sPassword = InputBox("Inserire la password ","Password",sPassword)
' memorizza la lunghezza della password e del charset
nLenPwd = Len(sPassword)
nLenChars = Len(sChars)
If nLenPwd > 0 And Len(sTesto) > 0 Then
Call Scrivi("Testo originale",True)
Call Scrivi(sTesto)
Call Scrivi
'crypt
For k = 1 To Len(sTesto)
' legge il carattere nella posizione all'intern odel testo da cryptare
sChr = Mid(sTesto,k,1)
' ottiene la posizione nel charset
i = InStr(sChars,sChr)
' calcola la posizione del carattere Mask che puo andare da 1 a nLenPwd
iMask = (k Mod nLenPwd)+1
' legge il carattere mask dalla password
sChrMask = Mid(sPassword,iMask,1)
' ottiene la posizione nel charset
ii = InStr(sChars,sChrMask)
' ottiene la posizione nel charset per il nuovo carattere criptato
iPos = i + ii
If iPos > nLenChars Then iPos = iPos - nLenChars
' ottiene il carattere criptato
sChrCryp = Mid(sChars,iPos,1)
' aggiunge il carattere criptato al testo criptato
sTestoCrypt = sTestoCrypt & sChrCryp
Next
' finito di criptare il testo lo scrive a video
Call Scrivi("Testo criptato",True)
Call Scrivi(sTestoCrypt)
Call Scrivi
' decrypt
' processo inverso del precedente
sTesto = ""
For k = 1 To Len(sTestoCrypt)
sChrCryp = Mid(sTestoCrypt,k,1)
i = InStr(sChars,sChrCryp)
iMask = (k Mod nLenPwd) +1
sChrMask = Mid(sPassword,iMask,1)
ii = InStr(sChars,sChrMask)
iPos = i - ii
If iPos <= 0 Then iPos = iPos + nLenChars
sChr = Mid(sChars,iPos,1)
sTesto = sTesto & sChr
Next
Call Scrivi("Testo decriptato",True)
Call Scrivi(sTesto)
End If
End Sub