Elenet.net
+2 voti
Questo algoritmo effettua una semplice crittografia.

Il controllo della password non funziona, correggete l'errore e commentate il codice.  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char v[],w[];
int main()
{
  int i=0;
 
int chiave=30;
printf("inserisci password");
scanf("%s",v);
while(v[i]!='\0')
{
v[i]=v[i]-chiave;
i=i+1;
}
printf("password codificata: %s\n",v);
int l=strlen(v);
  system("PAUSE");

printf("inserisci la password\n");
scanf("%s",w);
i=0;
while(v[i]!='\0')
{
if(w[i]==(v[i]+chiave))
i=i+1;
else
{
break;
}
}
if((w[i]!='\0')&&(l==strlen(w)))
printf("password esatta\n");
else
printf("password errata\n");
system("PAUSE");
}
quesito posto 20 Marzo 2013 in Classe terza da Emanuele Rizzo Esperto (238 punti)
  

5 Risposte

+1 voto

 

Ho modificato il programma e controllato se funziona, ora dovrebbe andare senza problemi. L'unica parte modificata è quella commentata.
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char v[],w[];
int main()
{
  int i=0;
 
int chiave=30;                           
printf("Inserisci password: ");
scanf("%s",v);
while(v[i]!='\0')
{
v[i]=v[i]-chiave;
i=i+1;
}
printf("Password codificata: %s\n",v);
int l=strlen(v); 
  system("PAUSE"); 
 
printf("Inserisci la password\n");
scanf("%s",w);
i=0;
while(v[i]!='\0')
{
if(w[i]==(v[i]+chiave))
i=i+1;
else
{
break;
}
}
if((w[i]==v[i])&&(l==strlen(w)))     
 
/*verifichiamo che w[i] sia uguale a v[i], in modo tale che vengano confrontati lettera dopo lettera, e se tutte uguali riconosce la password come esatta.*/
 
printf("Password esatta.\n");
else
printf("Password errata.\n");
system("PAUSE");
}

 

risposta inviata 20 Marzo 2013 da anonimo Corsista (69 punti)
Alongi, io ho provato il programma ma risulta non funzionante. Ho inserito "ciao" e mi ha fornito come risultato finale "password errata".
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char v[],w[];
int main()
{
  int i=0;
 
int chiave=30;
printf("inserisci password");
scanf("%s",v);
while(v[i]!='\0')
{
v[i]=v[i]-chiave;
i=i+1;
}
printf("password codificata: %s\n",v);
int l=strlen(v);
  system("PAUSE");

printf("inserisci la password\n");
scanf("%s",w);
i=0;
while(v[i]!='\0')
{
if(w[i]==(v[i]+chiave))
i=i+1;
else
{
break;
}
}
if((w[i]=='\0')&&(l==strlen(w))) /*invece di mettere che w[i]!='\0', ho messo che w[i] sia == '\0' così da cosi da codificare il codice fino a quando non incontra \0 (penso sia giusto così)*/
printf("password esatta\n");
else
printf("password errata\n");
system("PAUSE");
}
A me non da questo errore. Ricontrolla copiando il codice da me fornito.
Ho riprovato, nulla da fare...
+1 voto

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char v[],w[];
int main()
{
  int i=0;
 
int chiave=30;
printf("inserisci password");
scanf("%s",v);
while(v[i]!='\0')
{
v[i]=v[i]-chiave;
i=i+1;
}
printf("password codificata: %s\n",v);
int l=strlen(v); 
  system("PAUSE"); 
 
printf("inserisci la password\n");
scanf("%s",w);
i=0;
while(v[i]!='\0')
{
if(w[i]==(v[i]+chiave))
i=i+1;
else
{
break;
}
}
if((w[i]=='\0')&&(l==strlen(w))) /*invece di mettere che w[i]!='\0', ho messo che w[i] sia == '\0' così da codificare il codice fino a quando non incontra \0 (penso sia giusto così)*/
printf("password esatta\n");
else
printf("password errata\n");
system("PAUSE");
}
risposta inviata 20 Marzo 2013 da Marco Scarpaci Corsista (94 punti)
0 voti

 

Ecco l'algoritmo modificato,  nei casi che ho testato, funzionante.
 
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char v[];
char w[];
int i=0;
int l;
int chiave=30;
main()
{
printf("Inserisci password:\n");
scanf("%s",v);
while(v[i]!='\0')
{
v[i]=v[i]-chiave;
i=i+1;
}
printf("Password codificata:\n%s\n",v);
 
 
l=strlen(v); 
 
 
printf("Inserisci la password:\n");
scanf("%s",w);
i=0;
while(w[i]!='\0')
{
if(w[i]==(v[i]+chiave))
{
i=i+1;
}
else
{
    printf("Password errata!\n");
    break;
}
}
if(i==l)
{
printf("Password esatta!\n");
}
else if(i!=l)
{
printf("Password errata!\n");
}
system("PAUSE");
}
 
risposta inviata 20 Marzo 2013 da Salvatore Firriolo Corsista (131 punti)
modificato 21 Marzo 2013 da Salvatore Firriolo
0 voti
1-Su Linux utilizzo la funzione char *getpass() per silenziare l'echoing e non far vedere ciò che sto digitando, evitando anche diversi overflow.
2-Cripto la password secondo (il povero) algoritmo.
3-Elimino la password dalla memoria.

Per il confronto basta ripetere l'operazione con le dovute piccole modifiche.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#ifndef __gnu_linux__
    printf("Piattaforma non supportata\n");
#endif

int main(int argc, char **argv)
{
    char *pass;
    int i, chiave=30;

    pass=getpass("Password: ");
    while (pass[i] != '\0'){
        pass[i]-=chiave;
        i++;
    }
    printf("La password criptata e': %s\n", pass);
    free(pass);

    return 0;
}

 

risposta inviata 19 Aprile 2013 da Antonio Tarantino Corsista (68 punti)
–3 voti
Io un ma firu ç_ç
risposta inviata 18 Aprile 2013 da anonimo

Domande correlate

777 domande
1,565 risposte
638 commenti
1,445 utenti