Entra

View Full Version : [C] Cryptare e decriptare


Krakz
02-03-2003, 17:03
questo codice č stato modificato da P8257 WebMaster
risolve il problema del gets , ma adesso non funziona piu la funzione Decrypt (cioč da valori sballati)

# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <conio.h>

/*
Name: CRYDEC TOKI
Author: KRAKZ
Date: 25/02/03 23.08
Description: CRYPTA E DECRYPTA
LICENZA : GNU|GPL
VERSIONE : 1.0
RINGRAZIAMENTI : P8257 WebMaster ,
*/

void crypt (void) ;
void decrypt (void) ;

# define MAX 255

int main (void)
{
printf (" *** BENVENUTO SU CRYDEC VERSIONE 1.0 ***\n\n\n") ;
printf ("SELEZIONA UNA DELLE OPZIONI\n\n") ;
printf ("1 - Crypta\n") ;
printf ("2 - Decrypta\n") ;
printf ("3 - Info autori\n") ;
printf ("Digita 1, 2 o 3 ");
while (1)
{
switch(getch()) {
case 0+'1': crypt () ;
break ;

case 0+'2': decrypt () ;
break ;

case 0+'3': printf ("Krakz") ;
break ;

default: exit(0);
}
}
return 0;
}


void crypt (void)
{
int i, I = 0 , countchiave , countfrase , crypt[MAX] ;

char frase[MAX]="\0" , chiave[MAX]="\0" , nomefile[10]="\0" ;

FILE *cfPtr , *apri ;

printf ("Benvenuto su crypt 0.5\n") ;

printf ("Inserisci frase\n") ;
gets(frase) ;
printf ("Inserisci chiave\n") ;
gets(chiave) ;
printf ("Salva con nome\n") ;
gets(nomefile) ;


countfrase = strlen(frase) ; /* VERIFICA LA LUNGHEZZA DELLE STRINGHE */
countchiave = strlen(chiave) ;

for ( i = 0 ; countfrase > i ; i++) /* CONTROLLA CHE TUTTA LA STRINGA SIA CRIPTATA */


{

if ( countchiave < I) I = 0 ;; /* CONTROLLA SE SONO STATE UTILIZZATE TUTTE LE LETTERE DELLA CHIAVE
SE VEDE CHE SONO STATE USATE TUTTE , RESETTA IL TUTTO PARTENDO
DALLA PRIMA LETTERA */

crypt[i] = chiave[I] + frase[i] ; /* CRIPTA LA STRINGA */

if ((cfPtr = fopen( nomefile , "a")) == NULL)

printf("File gia aperto\n");



if ( crypt[i] < 100 ) fprintf(cfPtr, "0" ) ;; /* VERIFICA CHE IL VALORE DATO SIA MAGGIORE DI 100
E SE RISCONTRA UN VALORE MINORE DI 100 AGGIUNGE
IL VALORE 0 */
fprintf(cfPtr, "%d", crypt[i] ); /* STAMPA LA FRASE CRIPTATA */


I = 1 + I ; /* REALIZZA UNO SHIFT A DESTRA */

}

fprintf(cfPtr, "\n\n\nUsa decrypt per vedere il testo\n\n" ) ;
fprintf(cfPtr, "\n\n\nVersione programma 1.0\n\n" ) ;
fprintf(cfPtr, "\n\n\nwww.toki.it\n\n" ) ;
printf ("Il file testo č stato cryptato , per decryptarlo") ;

getch();

}

void decrypt (void)
{

int I=0 , i , countfrase , countchiave , dEcrypt[MAX] , de = 0 ;
char frase[MAX]="\0" , chiave[MAX]="\0" ;



printf ("Inserisci File Cryptato\n") ;
gets(frase) ;
printf ("Inserisci chiave\n") ;
gets(chiave) ;


countfrase = strlen(frase) ;
countchiave = strlen(chiave) ;

for ( i = 0 ; countfrase > i ; i = 3 + i)

{
if ( countchiave < I)
I = 0 ;;

dEcrypt[de] = (frase[i]* 100 + frase [i+1] * 10 + frase [i+2] +48 ) - chiave [I] ;

printf ("%c" , dEcrypt[I]) ;
I = 1 + I ;


}
getch();
}



qualcuno sa come risolvere il problema ?????????

Krakz
02-03-2003, 17:10
problema risolto
potete chiudere il 3d

ultio
02-03-2003, 17:51
ricordati che un cifrario in one time pad per essere inviolabile deve avere la chiave della stessa lunghezza del testo in chiaro.
nel momento in cui riazzeri il conto e riparti dall'inizio della chiave crei un buco nella sicurezza del codice.
ciauz

Krakz
02-03-2003, 19:31
ho capito gia ho trovato un paio di bugs ;)