Newsgroup: it.comp.sicurezza.crittografia
Titolo: Cifrario vigenere

Sto cercando di scrivere in c il metodo di crittografico di vigenè, fin'ora
ho scritto il seguente codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
 char parolachiave[256] ;
 char c;
 int i,j,n,k,m;
 char tabella [26][26];
 n=0;
 FILE *          fp1 ;
  FILE *          fp2 ;
fp1 = fopen("testo_in_chiaro.txt", "r");
 if (fp1==NULL)
    {
  printf("File %s not found\n", "testo_in_chiaro.txt");
  getchar();
  return(-1);
 }
fp2 = fopen("testo_crittato.txt", "w");
    if (fp2==NULL)
    {
     printf("Problemi nella apertura/creazione del file %s \n",
"testo_decrittato.txt");
     getchar();
     return(-1);
    }
    printf("introduci la parola chiave:  ");
    scanf("&s", parolachiave);
    for (i=0; i<26; i++)
    {
        for (j=0; j<26; j++)
        {
            tabella[i][j]=i+j+65;
            if (tabella[i][j]>90)
               {
                tabella[i][j]=tabella[i][j]-26;
                 }
        }
    }
    while (fscanf(fp1, "%c", &c)==1)
    {
          k=(int)c-64;
          m=(int)parolachiave[n]-64;
          fprintf(fp2, "%c", tabella[m][k]);
          n=n+1;
          if (n>strlen(parolachiave))
          n=0;
    }
    fclose(fp1);
 fclose(fp2);
 fflush(stdin);
 getchar();
  exit(0);
}
Perchè non funziona?
Eppure logicamente dovrebbe...

 ha scritto nel messaggio 
news:D4Ieg.9186$y01....@tornado.fastwebnet.it...

mi dici sto algoritmo?Se non metti nemmeno un commento come pensi che possa 
aiutarti?
-- 
 Per contattarmi in privato scrivete a:
--->vitoPUNTOcatozzoCHIOCCHIOLINAgmailPUNTOcom<---
Sostituite alle parole in maiuscolo i simboli corrispondenti :-) 
Inviato da X-Privat.Org - Registrazione gratuita 
http://www.x-privat.org/join.php

 ha scritto nel messaggio 
news:447b5341$1...@x-privat.org...

Pensavo conoscessi l'algoritmo di cifratura di vigenere...comunque qui è 
spiegato bene:
http://it.wikipedia.org/wiki/Cifrario_di_Vigenere
Ciao! 

     }
Non so se funziona o meno ma è ORRENDO!
Una fscanf per leggere/scrivere un carattere da un file..... orrendo....
Leggi anche i caratteri speciali alla fine del file occhio, forse è 
questo il motivo.
Saluti, Francesco


Non funziona...purtroppo....per quanto riguarda la funzione per leggere i 
caratteri a 1 a 1....obbedisco agli insegnamenti del prof....(non avendolo 
fatto alle superiori poi....)
Ciao

          m=(int)parolachiave[n]-64;
[...]
perché qua fai "-64" invece di "-65"?
Cristiano 



Ho già "aggiustato" quell'errore...ho notato però che funzione solo per 
testi in chiaro di lunghezza minori della chiave...se invece sono più lungi 
della chiava (il 99,9% dei casi) mi stampa dei caratteri stranissimi....sto 
impazzendo...help me!!!! 

 stranissimi....sto impazzendo...
Tutto quello che fai nel ciclo per creare la tabella lo devi ripetere in 
fase di decifratura: se decidi di limitare i caratteri da 'A' a 'Z', devi 
fare altrettanto in decifratura:
  while (fscanf(fp1, "%c", &c)==1)
    {
          k=(int)c-64;
diventa:
  while (fscanf(fp1, "%c", &c)==1)
    {
         if(c>96) c-=32;
          k=(int)c-64;
stessa cosa per parolachiave[n].
Inoltre 'n' non può superare strlen(parolachiave)-1, per cui
    n=n+1; if (n>strlen(parolachiave)) n=0;
diventa
    if (++n==strlen(parolachiave)) n=0;
Al di là di tutto questo, anziché limitare i caratteri da 'A' a 'Z' 
(escludendo i numeri, la punteggiatura, lo spazio, ecc) perché non utilizzi 
tutti i 256 caratteri disponibili? In questo modo potresti cifrare qualunque 
file e inoltre per la chiave potresti usare un CPRNG (o, al limite, un 
PRNG). Rimarrebbe sempre un programma didattico, ma potrebbe anche servire 
per qualcosa di più serio, ovvimente non troppo serio! :-)


 fare altrettanto in decifratura:
I problemi li ho in CIFRATURA   non in decifratura.... 


Considerando che nel codice che hai postato non c'č la decifratura, 
ovviamente dove ho scritto 'decifratura' intendevo dire 'cifratura'.



Provato...ma nulla....