Newsgroup: it.comp.lang.c++
Titolo: criptare una stringa

come posso fare per criptare una stringa?


In generale dipende da qual è l'obiettivo della tua criptatura
(comunicazione protetta, salvataggio dati in forma sicura,...), quindi se
sei interessato ad un metodo a chiave privata o pubblica. Un metodo molto
semplice a chiave privata è quello di utilizzare una "maschera", ossia di
eseguire un'operazione di XOR bit a bit tra i caratteri della tua stringa e
quelli di una stringa segreta (la maschera). Per ottenere nuovamente la
stringa originaria a partire da quella criptata è sufficiente eseguire
nuovamente l'operazione
La sicurezza su questo algoritmo di criptatura si ha quando la lunghezza
della maschera è paragonabile a quella della stringa da codificare.
Ciao
Riz


Hai molte possibilità. La più semplice si basa sulla tecnica di
sostituzione monoalfabetica come ad esempio:
Chiaro		Cifrato
a	--->	g
b	--->	j
c	--->	p
d	--->	c
e	--->	h
f	--->	k
g	--->	q
h	--->	s
i	--->	r
....
Per decifrare, cerchi il carattere e vedi il valore dell'indice, poi
aggiungi 97 ed ottieni il carattere decifrato.
Io avevo scritto una classe che effettuava una sostituzione
monoalfabetica su tutti i 256 valori ASCII, se non riesci a venirne
fuori, fammi sapere che provo a cercarla.
Altra tecnica, forse ancora più semplice, si basa sulla cifratura di
Cesare: ogni lettera è sostituita con una lettera di n posti più in
"la" nell'alfabeto.
a	--->	c
b	--->	d
c	--->	e
----
x	--->	z
y	--->	a
z	--->	b
Per decifrare togli alla lettera cifrata il valore di n.
class CifraturaDiCesare
{
	private:
		int n;
	public:
		CifraturaDiCesare(){n=0;};
		CifraturaDiCesare(int spostamento){n=spostamento;};
		char Cripta(char);
		char Decripta(char);
};
char CifraturaDiCesare::Cripta(char c)
{
	c+=n;		//aggiungo al carattere lo spostamento
	if (c>'z')		//se il carattere è andato oltre il
massimo consentito lo riporto indietro di 26
	  c-=26;
	return c;		//ritorno il carattere cifrato
}
char CifraturaDiCesare::Decripta(char d)
{
	d-=n;		//tolgo al carattere lo spostamento
	if (d<'a')		//se il carattere è sotto il minimo
consentito gli aggiungo 26
	   d+=26;
	return d;		//ritorno il carattere decifrato
}
Se ti interessano altre tecniche, più avanzate, prova a cercare su
www.google.com
  "Crypt Information" oppure su Usenet sci.crypt
 
Ciao
Diego the dolphin
-- 
Parafrasando Cartesio, "Digito, ergo sum." (D. Zanga)

 ha scritto nel messaggio
news:Mt3W7.32193$o9.10...@news1.tin.it...


confrontare poi con quella immessa dall'utente per  verificarne l'esattezza.
Anche in questo caso puoi procedere in più modi.
Per esempio:
1  -  Cripti la password data dall'utente con il metodo XOR che ti ha
illustrato News da TIN e la confronti con la password cifrata.
2  -  Decripti la password e la confronti con quella data dall'utente.
(personalmente questa soluzione non mi piace, ma è una MIA opinione)
Altre tecniche di FACILE implementazione oltre a quelle che già ti ho
detto non mi vengono in mente.
Se vuoi qualcosa di più complicato e sicuro puoi provare ad utilizzare
l'algoritmo blowfish; alcuni link:
http://www.codeproject.com/useritems/blowfish.asp
http://www.geocities.com/SiliconValley/Network/2811/algo/blowfish.htm
Ci sono molti altri algoritmi crittografici come ad esempio DES, IDEA
(mi sembra di ricordare che Blowfish derivi da questi), etc.
Ciao


 ha scritto nel messaggio
news:n36j2ukglvr816djg...@4ax.com...
