Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti...ultimamente mi sono dedicato alla crittografia dei file. Per quanto riguarda crittografarli non ci sono problemi, il problema giunge nel momento di decrittografarli, infatti il compilatore mi dice il seguente errore <<Lunghezza dei dati da decrittografare non valida.>> L'algoritmo di cifratura e il sorgente del programma è identico a quello pubblicato sul sito di Totem qui http://totem.altervista.org/guida/versione2/D7.php . Ovviamente escludo errori di immissione della password, e la riga di codice evidenziata è
Output = Decryptor.TransformFinalBlock(Data, 0, Data.Length)'Qui mi da l'errore...
Provider.Clear()
Decryptor.Dispose()
Return Output
EndFunction
Volevo dire inoltre che x piccole stringhe di testo in programma funge, il problema sussiste solo quando vado a decrittografare un file... boh cmq grazie x l'aiuto....
Ultima modifica effettuata da klez91 il 03/02/2009 alle 20:39
Controlla che Data.Length non sia 0. Controlla inoltre che la lettura sia coerente e restituisca un messaggio integro, e che non si fermi per eventuali byte nulli (se usi ad esempio streamreader o networkstream per la lettura).
Eh si hai ragione...mi sono accorto che quando andavo ad aprire il file crittografato e lo inserivo in una array di byte, l'array conteneva un byte in più rispetto alle reali dimensioni del file e x questo mi dava l'errore...Ti ringrazio molto per l'aiuto.
Però adesso vorrei approfittarne per farti uan piccola domanda, scusami se è un po off-topic, è consigliabile utilizzare qst algoritmo anche x lo scambio protetto di dati in una connessione diretta client-server, e se si come potrei proteggere la pass in modo da evitare che venga letta disassemblando l'exe ???
Rinjdael è un algoritmo abbastanza pesante, perchè usa blocchi e chiavi da 256bit, e per operazioni che richiedono lo scambio di messaggi in rete sarebbe necessario un algoritmo, magari un po' meno sicuro, ma più veloce, come DES o 3DES. Ricorda, inoltre, che i dati crittografati possono assumere anche una dimensione maggiore dei dati di input, e ciò non giova certo a uno scambio in rete.
Le password vengono lette o inviate dal programma a runtime (risiedono quindi nella memoria RAM), mentre la disassemblazione permette solo di vedere il codice, come file di testo fisico. Sono, perciò, due ambiti che non c'entrano l'uno con l'altro, anche se è possibile che si ricompili il progetto con un IDE e si usi un breakpoint per fermare l'esecuzione del programma e guardare la password. Ma questo può essere fatto solo sulla macchina dell'eventuale cracker, al quale non credo interessi molto craccare la propria password.
Un altro attacco che può essere scagliato per rintracciare una password è una scansione della RAM assegnata al processo, il che potrebbe individuare le stringhe usate come variabili temporanee. Il modo per sbarazzarsi il più rapidamente possibile di tali stringhe è usare un oggetto SecureString, come ho fatto nel mio programma KeyGuard3. SecureString viene convertito in stringa reale solo il tempo necessario al confronto della password, e tale stringa viene poi eliminata tramite l'uso di puntatori.
Per l'algoritmo credo che userò il DES, perchè preferisco mantenere una certa velocità di scambio dei dati...per quanto riguarda la password invece io intendevo dare la possibilità all'utente di scegliere se impostare una connessione portetta o meno, e se la scelta ricadeva su quella protetta i messaggi venivano criptati secondo una password scelta da me ed inserita sia nel client che nel server in modo da risparmiare la scocciatura all'utente di cominicare ogni volta al server la password scelta...Il problema quindi sta nel nasconere la password nel programma già compilato in modo da evitare che qualke utente malintenzionato la possa leggere disassemblando l'exe...Non so se mi sono spiegato bene, la connessione protetta dovrebbe avvenire tutto in automatico....
Ultima modifica effettuata da klez91 il 05/02/2009 alle 18:36
Forse non hai ben afferrato: se la nascondi nel programma già compilatio (ossia come stringa), E' VISIBILE mediante disassembler, sempre. Anche se la crittassi e usassi un codice molto complesso per decifrarla a runtime, chiunque potrebbe vedere lo stesso codice e quindi ottenere la password. Usare una sola password incorporata nell'eseguibile è sicuramente uno dei provvedimenti da NON prendere per migliorare la sicurezza dell'applicazione.
Ah si lo avevo immaginato, però stavo pensando a programmi come msn, dove spuntando la casella "Salva password" creano una password crtittografata nel registro di sistema...anche se vabbè in ogni caso esistono sempre programmi in grado di decrittografarla...Cmq grazie mille x l'aiuto...ciao