PDA

Visualizza versione completa : [ansi c] ERRORE IN CRYPT


krakz
27-02-2003, 22.54.06
/*
Name: CRYDEC TOKI
Author: KRAKZ
Date: 25/02/03 23.08
Description: CRYPTA E DECRYPTA
LICENZA : GNU|GPL
VERSIONE : 1.0
*/

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




# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define MAX 255


int main ()

{ int I;
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-3-4\n");
while (( I = getchar ()) != EOF)

{

switch(I) {

case '1': crypt () ;
break ;

case '2': decrypt () ;
break ;

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


}
}
}


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

char frase[MAX] , chiave[MAX] , nomefile[10] ;

FILE *cfPtr;




getchar () ;
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 0.5\n\n" ) ;
printf ("Il file testo è stato cryptato , per decryptarlo\n") ;

system("PAUSE"); /* COMANDO COMPATIBILE SOLO CON OS WIN , RICHIEDE LA
PRESSIONE DI UN TASTO PER CONTINUARE L'ESECUZIONE
DEL PROGRAMMA*/

}

int decrypt ()
{

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


getchar() ;
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 ;


}


printf ("\n") ;



}


adesso il file crypt non salva su file testo il file criptato
quando il modulo crypt da solo lo fa :S :S

P8257 WebMaster
28-02-2003, 15.02.32
Non fare confusione coi thread, vai a vedere la versione che ti ho postato dall'altra parte..

e cioè:


# 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
*/

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();
}



Mi sono permesso di fare alcuni aggiustamenti ...
Le variabili in C devono essere inizializzate, altrimenti non saprai mai cosa contengono.


Bye :cool:

krakz
01-03-2003, 14.10.08
grazie ma adesso non funziona il decrypt
quando inserisco il codice criptato in decimale , mi da sempre la stessa cosa ;(

P8257 WebMaster
01-03-2003, 14.37.19
Scusa io non ho prestato in effetti molta attenzione alla funzionalità del programma, mi sono solo concentrato sull'incompatibilità delle routine, provando a riguardarlo noto alcune cose che andrebbero riviste perché poco comprensibili come:


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

in Decrypt()

per maggiore chiarezza utilizza gli specifici operatore di pre e post incremento che il C ti mette a disposizione, come ++variabile o variabile++ o ancora variabile+=valore invece di variabile = variabile + valore .. almeno così inizi a dare più chiarezza al tutto.

Bye :cool:

LoryOne
25-03-2003, 14.06.46
i+=3 forse è meno chiaro ma è molto C:)