› Sviluppare funzionalita su Microsoft Office con VBA › Modulo per criptare e decriptare file di testo
-
AutoreArticoli
-
Ciao a tutti, avevo l'esigenza di salvare dei dati dentro un semplice file di testo, però volevo che non risultassero visibili a tutti, quindi ho creato un semplice modulo con due funzioni: una per criptare la stringa di testo ed un'altra per decriptarla.
In pratica il sistema funziona come da immagine di esempio sottostante:
Ovviamente come stringa si può passare anche il contenuto di tutto un file di testo.
Vi allego il file con il modulo delle due funzioni, così a chi potesse servire se lo può copiare, e/o modificare a piacimento, nel suo progetto. Ciao.
Allegati:
You must be logged in to view attached files.Public Function CriptaTesto(ByVal Testo As String) As String 'Nota: se incontra una lettera "y" questa viene criptata in un CR (codice 13) + LF (codice 10), _ perciò nel DecriptaTesto bisogna togliere il LF quando incontra il codice 10Una limitazione inevitabile in un cifrario per sostituzione.
lngCodice = Asc(Mid$(Testo, i, 1)) lngCodice = 255 - lngCodice lngCodice = lngCodice * 2E' prolisso non trovi?
A parte le limitazioni di cui ti sei accorto (e il dover quindi correre ai ripari per gestire i caratteri particolari), queste routine basate sulla sostituzione possono essere forzate con un po' di attacchi a forza bruta. Dipende quindi da quanta robustezza ti serve nell'esportare i tuoi dati (considera sistemi più solidi come quello che uso io, basati su chiavi casuali e Xor). Cioè, se devi salvare una tavola di password forse non è il caso, ma se devi passare un indirizzario di fornitori (e mantenere un cauto riserbo sulle informazioni), allora è un sistema accettabile.
Ti ringrazio comunque per aver condiviso il tuo lavoro. Sicuramente tornerà utile a qualcuno
Dipende quindi da quanta robustezza ti serve nell'esportare i tuoi dati (considera sistemi più solidi come quello che uso io, basati su chiavi casuali e Xor). Cioè, se devi salvare una tavola di password forse non è il caso, ma se devi passare un indirizzario di fornitori (e mantenere un cauto riserbo sulle informazioni), allora è un sistema accettabile.
Concordo che non è robusta come sicurezza, ma l'intenzione è di celare ai meno esperti il contenuto, e fidati, a chi si rivolge se vede già che il file ha una estensione diversa da quelle classiche (.doc, .txt, etc...) si blocca. Se poi prova ad aprire il file con Notepad e vede tutti i segni strani sono sicuro che lo richiude in meno di un secondo
.Ciao.
Well done

Comunque hai ragione, come protezione è debole, perciò mi voglio mettere a fare qualcosa un po' più solida, con ad esempio una funzione di derivazione della chiave. Quando ho pronta la routine la copio, così mi dite che ne pensate.
Ciao.
Ottimo spirito di condivisione! E visto che l'argomento ti interessa, mi permetto di rimandarti alla lettura del piccolo articolo che ho scritto qualche tempo fa su queste pagine (magari troverai qualche spunto interessante):
Ciao VF, ho provato la tua funzione, se ho ben capito un file criptato con quella può essere letto da chiunque possieda quella funzione, non sarebbe meglio avere una criptazione legata ad una password ?
Quella funzione mi è servita per un progetto che aveva bisogno di memorizzare una tabella di password in un db Access. Solo il frontend di Admin ha la funzione di de-crittazione quindi anche qualora qualcuno trovasse il backend con la tabella di password, si troverebbe un mucchio di caratteri incomprensibili. Un lavoro più didattico che altro, ma sufficiente allo scopo 🙂
Ottimo spirito di condivisione! E visto che l'argomento ti interessa, mi permetto di rimandarti alla lettura del piccolo articolo che ho scritto qualche tempo fa su queste pagine (magari troverai qualche spunto interessante):
Grazie, appena finito di leggere. Interessante articolo e tra l'altro ho imparato qualcosa di più sull'uso di Xor.
qui http://www.vbaexpress.com/kb/getarticle.php?kb_id=951 puoi trovare una funzione che usa una password
qui http://www.vbaexpress.com/kb/getarticle.php?kb_id=951 puoi trovare una funzione che usa una password
Patel, ho provato ad implementare la funzione che hai segnalato, però c'è qualcosa che non va, o meglio, con alcuni testi funziona, mentre con altri non ritorna correttamente il testo iniziale. Ho messo di seguito un esempio:
e dopodiché ho inserito il testo cifrato e non è tornato il testo iniziale.
Non capisco dove sia l'errore.
a me funziona, allego file
Allegati:
You must be logged in to view attached files.a me funziona, allego file
Credo che il problema sia nella casella di testo. Se utilizzo le celle del foglio di calcolo non ci sono problemi, però se il risultato lo metto dentro una TextBox viene diverso. Guarda il file modificato che ti ho allegato e l'immagine sottostante.
Stessa funzione, stessi dati di ingresso, però il risultato è diverso se l'output lo inserisco in una cella oppure dentro una casella di testo. Facendo dei semplici controlli si può vedere che il testo della cella non è lo stesso di quello dentro la casella di testo, anche se in entrambi è stato inserito il solito risultato. È questo il motivo per cui rileggendo dalla casella di testo non torna più il testo originale.
Allegati:
You must be logged in to view attached files.Stessa funzione, stessi dati di ingresso, però il risultato è diverso se l'output lo inserisco in una cella oppure dentro una casella di testo.
Confermo che il problema è la casella di testo. Ho fatto la seguente prova di verifica:
- il testo cifrato l'ho messo dentro una variabile stringa e poi ho passato la stringa come argomento per la decodifica e funziona tutto correttamente restituendo il testo originale
- il testo cifrato l'ho messo dentro la casella di testo e poi ho passato il contenuto della casella di testo come argomento per la decodifica e il risultato è diverso dal testo iniziale.
Qualcuno ha idea del perché succeda questo?
probabilmente è un problema di codifica nella trasformazione in byte, l'importante sarebbe che funzionasse con file di testo e mi sembra proprio di no, alcuni caratteri dopo lo xor diventano LF o CR e quindi spezzano le righe del file di testo non rendendo possibile il decrypt che cerca la stringa xxx
Per file di testo mi sembra più adatto il metodo 3DES Encryption/Decryption che trovi qui
https://stackoverflow.com/questions/1470939/encrypting-and-decrypting-strings-in-excel/48054645
-
AutoreArticoli
