Newsgroup: it.comp.lang.c
Titolo: crittografia

Salve a tutti,
devo fare  per un'esame un elaborato
di crittografia che critti e decritti
un testo.
Devo approfondire 2 tecniche
di crittografia.
Cerco materiale , suggerimenti,
spunti, e magari anche qualche bel
file sorgente  o esempi.
Grazie a tutti e ciao.
                                            E.F.
--
Posted from 
ro...@obelix.val.it
 [194.244.89.2]
via Mailgate.ORG Server - 
http://www.mailgate.org

Elisa and Emi wrote:

Son richieste queste funzioni di criptaggio ;)
Io ho scritto una libreria (giusto 4 funzioni ) che anche quello che tu
chiedi:  fcrypt(); funcrypt();
L'ho sviluppata in linux (e' cmq tutto ANSI C) pero' credo ci sia da
fare qualche modifica al
Makefile in relazione al compilatore che usi.
Se ti serve, io son qua ....
e-mail: 
net...@tiscalinet.it
------------------------------------
Slackware Linux 7.0

> file sorgente  o esempi.
Voilà!
-----/* ****************************************************************
 ENCRYPT
 Cripta una stringa sommando al valore numerico di ogni carattere
 il valore numerico del carattere corrispondente nella chiave.
 Se la chiave e' piu' corta della stringa, viene applicata
 ripetutamente.
 Inversa: DECRYPT
 ****************************************************************
*/
unsigned char * DllExport encrypt (unsigned char *stringa, unsigned char
*chiave){
unsigned char *punta1, *punta2;
for (punta1 = stringa, punta2 = chiave; *punta1 != 0; punta1++, punta2++){
 if (!*punta2)
  punta2 = chiave;
 *punta1 = (unsigned char)((((int)*punta1 + (int)*punta2 - 2) & 255) + 1);
}
return stringa;
}
/* ****************************************************************
 DECRYPT
 Decripta una stringa sottraendo al valore numerico di ogni
 carattere il valore numerico del carattere corrispondente nella
 chiave. Se la chiave e' piu' corta della stringa, viene applicata
 ripetutamente.
 Inversa: ENCRYPT
 ****************************************************************
*/
unsigned char * DllExport decrypt (unsigned char *stringa, unsigned char
*chiave){
unsigned char *punta1, *punta2;
for (punta1 = stringa, punta2 = chiave; *punta1 != 0; punta1++, punta2++){
 if (!*punta2)
  punta2 = chiave;
 *punta1 = (unsigned char)((((int)*punta1 - (int)*punta2) & 255) + 1);
}
return stringa;
}
/* ****************************************************************
 BASEENCRYPT
 Cripta una stringa utilizzando una base.
 Se la chiave o la base e' piu' corta della stringa, vengono
 applicate ripetutamente. Puo' generare e ricevere zeri.
 Inversa: BASEDECRYPT
 ****************************************************************
*/
unsigned char * DllExport baseencrypt (unsigned char *stringa, unsigned char
*chiave){
unsigned char *punta1, *punta2, *punta3;
punta1 = stringa;
punta2 = chiave;
punta3 = (unsigned char *)base;
for (; *punta1; punta1++, punta2++, punta3++){
 if (!*(punta2+1))
  punta2 = chiave;
 if (!*(punta3+1))
  punta3 = (unsigned char *)base;
 *punta1 = (((unsigned int)(*punta3) + (unsigned int)(*punta2) -
  (unsigned int)(*punta1)) % 256);
}
return stringa;
}
/* ******************************************************************
 BASEDECRYPT
 Decripta una stringa utilizzando una base.
 Se la chiave o la base e' piu' corta della stringa, vengono
 applicate ripetutamente.
 Inversa: BASEENCRYPT
 ******************************************************************
*/
unsigned char * DllExport basedecrypt (unsigned char *stringa, unsigned char
*chiave){
unsigned char *punta1, *punta2, *punta3;
punta1 = stringa;
punta2 = chiave;
punta3 = (unsigned char *)base;
for (; *punta1; punta1++, punta2++, punta3++){
 if (!*punta2)
  punta2 = chiave;
 if (!*punta3)
  punta3 = (unsigned char *)base;
 *punta1 = (((unsigned int)(*punta3) + (unsigned int)(*punta2) -
  (unsigned int)(*punta1)) % 256);
}
return stringa;
}
/* ****************************************************************
 BINBASEENCRYPT
 Cripta una stringa utilizzando una base.
 Se la chiave o la base e' piu' corta della stringa, vengono
 applicate ripetutamente. Puo' generare e ricevere zeri.
 Inversa: BINBASEDECRYPT
 ****************************************************************
*/
unsigned char * DllExport binbaseencrypt (unsigned char *stringa, long
l_stringa, unsigned char *chiave, long l_chiave){
unsigned char *punta1, x, y;
long ciclo;
punta1 = stringa;
for (ciclo = 1; ciclo <= l_stringa; punta1++, ciclo++){
 x = *(base + (ciclo % strlen (base)));
 y = *(chiave + (ciclo % l_chiave));
 *punta1 = (unsigned char)((unsigned int)x + (unsigned int)y - (unsigned
int)(*punta1) % 256);
}
return stringa;
}
/* ******************************************************************
 BINBASEDECRYPT
 Decripta una stringa utilizzando una base.
 Se la chiave o la base e' piu' corta della stringa, vengono
 applicate ripetutamente. Puo' generare e ricevere zeri.
 Inversa: BINBASEENCRYPT
 ******************************************************************
*/
unsigned char * DllExport binbasedecrypt (unsigned char *stringa, long
l_stringa, unsigned char *chiave, long l_chiave){
unsigned char *punta1, x, y;
long ciclo;
punta1 = stringa;
for (ciclo = 1; ciclo <= l_stringa; punta1++, ciclo++){
 x = *(base + (ciclo % strlen (base)));
 y = *(chiave + (ciclo % l_chiave));
 *punta1 = (unsigned char)((unsigned int)x + (unsigned int)y - (unsigned
int)(*punta1) % 256);
}
return stringa;
}
/* ****************************************************************
 DIFFERENZA
 Calcola per quanti caratteri due stringhe sono uguali.
 ****************************************************************
*/
size_t DllExport car_uguali (char *stringa1,  char *stringa2){
size_t distanza = 0;
char *punta1, *punta2;
for (punta1 = stringa1, punta2 = stringa2; *punta1 != 0, *punta2==*punta1;
punta1++, punta2++){
 distanza++;
}
return distanza;
}
--------
Preso pari pari da una piccola libreria che avevo scritto quanche tempo fa.
Non è poi mai stata usata, per cui non rispondo di errori, omissioni, crash
o altri inconvenienti :-)
--
Alessandro Monti


Potrei aiutarti, perchè al sto lavorando ad un progetto sulla
crittografia...
ed all'incirca sono le stesse cose che interessano a te.
Putroppo il materiale che ho a disposizione è solo in formato
cartaceo.
Comunque ho cercato sul WEB e ho trovato le librerie che uso
e che potrebbero servirti.
Fai una ricerca con altavista.
Le librerie si chiamano:
                                        cryptolib toolkit (per unix)
(seguendo un paio di link arriverai ad una pagina in cui ci sono una
trentina
di altri link).
Non hai che da scegliere.
Ing. Cristiano Palazzo
Colleferro (Roma)
Università di Roma "La Sapienza"
Per favore dammi un ack della presente mail.
Ciao e buon lavoro.


 Slackware Linux 7.0
Ma che tipo di libreria hai scritto?
Credo che la complessità di fare una cosa del genere sia notevole.
Utilizzi anche algoritmi a chiave pubblica e privata?
E per l'hashing, la signature etc..etc ... riesci a gestire tutte queste
cose?
Ciao e complimenti!!
Cristiano.

Credo che Brain cercasse algoritmi standardizzati di crittografia, tipo DES,
RSA, IDEA etc. con cui criptare un testo (RSA fondamentale).
La cosa è ben diversa da fare una funzioncina che cripti e decripti.
Scusate l'arroganza...può darsi che sia andato fuori tema.
Buon lavro a tutti.


 La cosa è ben diversa da fare una funzioncina che cripti e decripti.
Può darsi che tu abbia ragione, ma questo è quello che avevo da offrirgli, e
glielo ho offerto.
Mi dispiace se non ho potuto fornire materiale migliore, ma almeno io ci ho
provato.
--
Alessandro Monti

> file sorgente  o esempi.
Voilı!
-----/* ****************************************************************
 ENCRYPT


/* ****************************************************************
 DECRYPT


/* ****************************************************************
 BASEENCRYPT



/* ******************************************************************
 BASEDECRYPT



/* ****************************************************************
 BINBASEENCRYPT

punta1 = stringa;

/* ******************************************************************
 BINBASEDECRYPT

punta1 = stringa;

/* ****************************************************************
 DIFFERENZA



Non Ë poi mai stata usata, per cui non rispondo di errori, omissioni, crash
