Newsgroup: it.comp.lang.visual-basic
Titolo: Criptare stringa in un file di testo

Sto provando ad utilizzare la classe trovata sul sito comune
(clsCrypto), funziona correttamente ma mi trovo davanti ad un
problema, per me irrisolvibile.
Memorizzando la stringa criptata su un file di testo capita che tra i
caratteri generati dalla classe mi trovi, ad esempio, uno "0D".
Quando vado a leggere la riga del file di testo con la funzione
GetPrivateProfileString la stringa che mi ritorna e' troncata,
giustamente, al carattere precedente lo 0D, con la conseguenza che non
posso recuperare (decriptare) il valore corretto.
Qualcuno ha qualche idea di come posso risolvere?
Non vorrei scrivere la stringa in una chiave di registro.
Ciao,
LittleWave

"LittleWave" ha scritto

Se la stringa non � troppo lunga potresti scriverne l'esadecimale
e poi riconvertirla in fase di lettura, prima di decriptarla.
Dico "se non � troppo lunga" perch� ovviamente facendo cos�
ne raddoppieresti la lunghezza, ma almeno saresti sicuro di usare
solo caratteri ASCII.
Bye, G. 


in genere le stringhe sono solo una "facilitazone" in ambito
"criptico"....una facilitazione che spesso incasina più di quanto
aiuti!!!
Sarebbe più corretto parlare di "Matrici di bytes"...cosa un pelino
diversa da una stringa!
la riga del file di testo dovresti leggerla e scriverla "binaria" e
usare un array per contenere i bytes!
in 
vb.net
 c'è interi namespaces dedicati
in vb6 no....ma con un po più di fatica si trattano anche con vb6
matrici di bytes!
c'era il sito web del blowfish che forniva un esempio in
vb6...completo di routines per trattare matrici di bytes...vediamo se
lo ritrovo....

 lo ritrovo....-
http://www.di-mgt.com.au/crypto.html
l'esempio in vb6 contiene molte interessanti routines!


Grazie, provero' a mettere in pratica i tuoi consigli.
Ciao,
LittleWave


wrote:

Grazie, cerco di capirne qualcosa di piu'.
Ciao,
LittleWave

 Qualcuno ha qualche idea di come posso risolvere?
In modo cialtrone e rapido, se fai un replace di 0D con una sequenza
altamente complessa ed improbabile, che poi riconverti prima di rileggere.
Io ho fatto una cosa del genere quando salvo l'SQL di alcune tabelle in
formato insert INTO lo trasformo da vbNewLine es a "§↔" e poi faccio la
conversione inversa in lettura. Ora io ad esempio so che  §↔ non ci sarà
mai nel DB.

 mai nel DB.
Il problema è che in una matrice di byte criptati è impossibile predire
con certezza se una determinata stringa sarà o meno presente.
Ecco perché, se la stringa è per esempio, una password o una
passphrase criptata, quindi diciamo da una dozzina a un paio
di centinaia di caratteri, per quel poco di spazio in più conviene
salvarla in esa.
(Sorvoliamo sul fatto che converrebbe salvare non la pwd stessa
ma un suo hash...
Bye G. 

 ha scritto nel messaggio 
news:7d1cda9a-090d-40df...@i39g2000yqm.googlegroups.com...

per criptare io ho utilizzato xor e non ho avuto problemi
ogni carattere (compleso anche gli spazi ,facccio xor con il primo carattrer 
della parola chiave, il carattere sucessivo lo xor con il secondo carattere 
della parola chiave ecc ecc,
leonello 

 salvarla in esa.
Non ho presente la classe che usa, per� se restituisce una stringa che
salvi sul file, in quel momento fai il replace, e quando dai la stringa per
il decrypt fai il replace inverso.

 il decrypt fai il replace inverso.
OK, questo si era capito. Ma il problema nasce se la tua stringa
di sostituzione esiste già nella stringa criptata.
Esempio. Stringa originale:
        abcdefghijklmno
Stringa criptata
        $%£/)(=(/'9§↔&$%£$
Ipotizza che la "£" sia il carattere che ti dà fastidio.
Quindi la sostituisci temporaneamente con una "§↔", giusto ?
Stringa convertita:
        $%§↔/)(=(/'9§↔&$%§↔$
Quando la vai a rileggere, devi riconvertirla, sostituendo tutte
la sequenze "§↔" con "£". Ti ritrovi questo:
        $%£/)(=(/'9£&$%£$
che purtroppo *non* è la stringa criptata che avresti voluto
riottenere. E quando la vai a decriptare, magari ti ritrovi
        abcdeftyuredkju
che non era la password di partenza.
Bye, G. 


zac
son tutte complicazioni IMHO incredibili:
tutti gli algoritmi criptano "pacchetti di byte"....se la stringa la
trasformassi in un array di byte...tutte le questioni decadrebbero!
Occhio (lo dico ovvio non a Paperino) che stringa e byte non
coincidono eh!
Una "A" viene rappresentata non come carattere ascii(ed allora
coinciderebbe con il byte) ma come carattere unicode (ossia almeno 2
byte per rappresentare un carattere)
spesso si vede in algoritmi pecorecci e caserecci una stringa usata
come "buffer"...beh insomma è come pompare una 500 per farla
gareggiare con una McLaren!
e per memorizzare su hard disk che uso allora? e per rileggere il
file?
ma un file letto e scritto in binario! e GET e PUT
Oppure la "pezza" che ti ha detto paperino....memorizzi tutto in
esadecimale su un file di testo...ma poi devi riconvertire da
esadecimale a byte...e perdi tempo IMHO inutilmente!
IMHO pensare a "array di bytes" ti aiuterebbe alquanto ...in vb6 hai
internet che ti aiuta...ci sono sterminate collezioni di routines per
criptare e decriptare....un link OTTIMO (sempre imho e per una
criptatura SIMMETRICA) te lo ho già dato!
in vb.net...eh beh...c'è già un namespace (anzi più di uno) che arriva
a gestire anche hash RSA e certificati digitali...che vuoi di
più!....un lucano???

 di sostituzione esiste gi� nella stringa criptata.
Si, per� appunto andiamo nel semi impossibile.
La mia era una soluzione se l'applicazione era banale, e si faceva con due
replace, e avevo appunto sottolineato i problemi.
Usando una sequenza di replace di 25 caratteri le probabilit� che ti arrivi
una sequenza uguale credo siano pi� basse che quelle di un HDD che scrive
una sequenza sbagliata su disco.
Io la uso comunque in ambiti dove so che un carattere non pu� essere
presente per certo nel'origine, quindi mi basta usare quel carattere e
altro e ho la sicurezza totale.

 altro e ho la sicurezza totale.
Ah, be', allora bari :-P
Bye, G. 

 Ah, be', allora bari :-P
A me serviva semplicemente per trasformare da tabella a comandi INSERT INTO
e so che alcuni caratteri non me li scrivono da programma. Fatto al volo e
funzionante per ora :)