Questo topic e' stato chiuso dal moderatore.
05/11/09 22:24
Furion
Salve ragazzi, vorrei porvi questo quesito: sto sviluppando un software tuttofare, una sorta di raccolta di utility, di cui una dovrebbe essere quella di crittaggio tramite AES. Ho trovato un modulo su internet per implementare questo algoritmo ed inzialmente avevo fatto in modo che il mio sw leggesse tutto il file sorgente (es. quello da crittare) e lo crittasse e poi riscrivesse su un nuovo file in un colpo. Ovviamente, però, provando a leggere un file più grande (ho provato con un file di circa 1 Gb e mezzo), il sw ha crashato sollevando la System.OutOfMemoryException (giustamente direi). Allora ho pensato di risolvere avviando un ciclo del genere (scrivo tipo pseudocodice xkè è tardi):
dim buff(1024) as byte
dim readed as ulong = 0
dim info as FileInfo = <File Sorgente>
dim sourceStream as FileStream = info.Open
dim outStream as FileStream = File.Create(fileDiDestinazione)
dim pass as string = "NoNlEgGeRe"
while (readed < info.Length)
' leggo nuovi dati
readed += sourceStream.read(buff, 0, buff.length)
' AES è il nome del modulo che ho scritto/trovato ed Encrypt è la funzione di crittaggio
' Encrypt vuole la stringa da crittare e la password. Pensa da solo a richiamare i
' due metodi private per creare la chiave e l'IV.
buff = Encoding.Default.GetBytes(AES.Encrypt(Encoding.Default.GetString(buff), pass))
' scrivo i dati crittati
outStream.Write(buff, 0, buff.Length)
end while
Il codice non è proprio quello che sto usando, cmq sta di fatto che finchè tentavo di crittare il file leggendolo in un colpo solo (facendo "sourceStream.Read(buff, 0, info.Length)" e poi passandolo alla funzione di crittaggio con le stesse modalità di codifica che ho scritto, funzionava tutto. Adesso non funziona nulla, o meglio: il processo va a buon fine (secondo lui) ma ho notato che se prima (leggendo e crittando tutto insieme) il file risultante era grande circa il doppio di quello originario, adesso la dimensione finale è addirittura inferiore. Infatti, se poi si prova a decrittare quanto ottenuto (con un ciclo del tutto simile) il sw mi solleva un'eccezione che purtroppo al momento non ricordo. Cos'è che sbaglio? Grazie a tutti in anticipo
dim buff(1024) as byte
dim readed as ulong = 0
dim info as FileInfo = <File Sorgente>
dim sourceStream as FileStream = info.Open
dim outStream as FileStream = File.Create(fileDiDestinazione)
dim pass as string = "NoNlEgGeRe"
while (readed < info.Length)
' leggo nuovi dati
readed += sourceStream.read(buff, 0, buff.length)
' AES è il nome del modulo che ho scritto/trovato ed Encrypt è la funzione di crittaggio
' Encrypt vuole la stringa da crittare e la password. Pensa da solo a richiamare i
' due metodi private per creare la chiave e l'IV.
buff = Encoding.Default.GetBytes(AES.Encrypt(Encoding.Default.GetString(buff), pass))
' scrivo i dati crittati
outStream.Write(buff, 0, buff.Length)
end while
Il codice non è proprio quello che sto usando, cmq sta di fatto che finchè tentavo di crittare il file leggendolo in un colpo solo (facendo "sourceStream.Read(buff, 0, info.Length)" e poi passandolo alla funzione di crittaggio con le stesse modalità di codifica che ho scritto, funzionava tutto. Adesso non funziona nulla, o meglio: il processo va a buon fine (secondo lui) ma ho notato che se prima (leggendo e crittando tutto insieme) il file risultante era grande circa il doppio di quello originario, adesso la dimensione finale è addirittura inferiore. Infatti, se poi si prova a decrittare quanto ottenuto (con un ciclo del tutto simile) il sw mi solleva un'eccezione che purtroppo al momento non ricordo. Cos'è che sbaglio? Grazie a tutti in anticipo
aaa