przeksztalcam kod dla szyfru Vigenere'a ale jest problem z pobraniem kolejnej litery (klucza) w petli for przy szyfrowaniu.. Znaki sa dobrze pobierane a litera(klucz) tylko pierwsza jest ok..
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char z, t, k;
char znak[5];
char key[5];
FILE* f = fopen("key.txt", "r");
k = getc(f);
for (t = 0; (t < 5) && (feof(f) == 0) && (k != '\n'); t++) {
key[t] = k;
k = getc(f);
}
fclose(f);
FILE* r = fopen("plain.txt", "r"); //czyta z pliku tekst jawny
z = getc(r);
for (i = 0; (i < 5) && (feof(r) == 0) && (z != '\n'); i++) {
znak[i] = z;
z = getc(r);
}
fclose(r);
for (i = 0; i < 5; i++) { //zamiana tekstu jawnego na kody ascii
printf("%d\n", znak[i]);
}
printf("Klucz: ");
for (t = 0; t < 5; t++) { //zmiana tekstu=klucza na kody ascii
printf("\n");
printf("%d\n", key[t]);
}
//szyfrowanie
for (i = 0; i < 5; i++) {
for (t = 0; t < 5; t++) {
if ((znak[i] >= 97) && (znak[i] <= 122)) {
znak[i] -= 97;
key[t] -= 97;
znak[i] += key[t];
znak[i] = znak[i] % 26;
znak[i] += 97;
}
else if ((znak[i] >= 48) && (znak[i] <= 57)) {
znak[i] -= 48;
key[t] -= 48;
znak[i] += key[t];
znak[i] = (znak[i] % 10);
znak[i] += 48;
}
}
}
FILE* out;
out = fopen("crypto.txt", "w+t");
for (i = 0; i < 5; i++) {
z = znak[i];
printf(" \n ");
printf("znaki: %c\n", z);
fprintf(out, "%c", z);
}
fclose(out);
return 0;
}