#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 1
#define N_CH 26
#define SECRETALPHABETPASSWORDN 7
int main (void) {
time_t t;
int i, j;
int r, tmp;
char plaintext [N+1];
char encryptedtext [N+1];
char usertext [N+1];
char caesarpasswd;
char userpassword;
char matrixtransposition [N_CH+1];
char matrixuntransposition [N_CH+1];
char secretalphabetpassword [SECRETALPHABETPASSWORDN+1];
FILE *fp;
int ch;
int table [N_CH+1];
srand (time (&t));
printf ("1.)\n\n");
for (i = 0; i < N; i++)
plaintext [i] = (rand () % N_CH) + 'a';
plaintext [N] = '\0';
caesarpasswd = (rand () % N_CH) + 'a';
for (i = 0; i < N; i++)
encryptedtext [i] = (((plaintext [i] - 'a') + (caesarpasswd - 'a')) % N_CH)+'a';
encryptedtext [N] = '\0';
printf ("Bitte Verschlüsseln\n %16s\n mit '%c'\n\n", plaintext, caesarpasswd);
scanf ("%s", usertext);
if (strcmp (usertext, encryptedtext) == 0) {
printf ("Richtig!\n");
}
else
printf ("Falsch!\n");
printf ("%s\n\n", encryptedtext);
printf ("\n\n\n2.)\n\n");
for (i = 0; i < N; i++)
plaintext [i] = (rand () % N_CH) + 'a';
plaintext [N] = '\0';
caesarpasswd = (rand () % N_CH) + 'a';
for (i = 0; i < N; i++)
encryptedtext [i] = (((plaintext [i] - 'a') + (caesarpasswd - 'a')) % N_CH)+'a';
encryptedtext [N] = '\0';
printf ("Bitte Entschlüsseln\n %16s\n mit '%c'\n\n", encryptedtext, caesarpasswd);
scanf ("%s", usertext);
if (strcmp (usertext, plaintext) == 0) {
printf ("Richtig!\n");
}
else
printf ("Falsch!\n");
printf ("%s\n\n", encryptedtext);
printf ("\n\n\n3.) Matrixtransposition\n\n");
for (i = 0; i <= N_CH; i++) {
matrixtransposition [i] = i + 'a';
matrixuntransposition [i] = i + 'a';
}
for (i = 0; i < N_CH; i++) {
r = (rand () % (N_CH-i)) + i;
tmp = matrixtransposition [i];
matrixtransposition [i] = matrixtransposition [r];
matrixtransposition [r] = tmp;
}
matrixtransposition [N_CH] = '\0';
matrixuntransposition [N_CH] = '\0';
printf ("%s\n", matrixuntransposition);
printf ("%s\n", matrixtransposition);
for (i = 0; i < N; i++)
plaintext [i] = (rand () % N_CH) + 'a';
plaintext [N] = '\0';
for (i = 0; i < N; i++) {
encryptedtext [i] = matrixtransposition[plaintext [i]-'a'];
}
encryptedtext [N] = '\0';
printf("Klartext: %s\n Geben Sie den verschlüsselten Text ein\n", plaintext);
scanf ("%s", usertext);
if (strcmp (usertext, encryptedtext) == 0)
printf ("richtig");
else
printf ("falsch");
printf ("\n%s", encryptedtext);
printf ("\n\n\n4.) Geheimalphabet\n\n");
for (i = 0; i < SECRETALPHABETPASSWORDN; i++) {
secretalphabetpassword [i] = (rand () % N_CH) + 'a';
matrixtransposition [i] = secretalphabetpassword [i];
}
secretalphabetpassword [SECRETALPHABETPASSWORDN] = '\0';
printf ("Password%s\n", secretalphabetpassword);
for (; i < N_CH; i++) {
matrixtransposition [i] = i - SECRETALPHABETPASSWORDN + 'a';
}
for (i = 0; i < N; i++)
plaintext [i] = (rand () % N_CH) + 'a';
plaintext [N] = '\0';
for (i = 0; i < N; i++) {
encryptedtext [i] = matrixtransposition[plaintext [i]-'a'];
}
encryptedtext [N] = '\0';
printf("Klartext: %s\n Geben Sie den verschlüsselten Text ein\n", plaintext);
scanf ("%s", usertext);
if (strcmp (usertext, encryptedtext) == 0)
printf ("richtig");
else
printf ("falsch");
printf ("\n%s", encryptedtext);
matrixtransposition [N_CH] = '\0';
matrixuntransposition [N_CH] = '\0';
printf ("\n%s\n", matrixuntransposition);
printf ("%s\n", matrixtransposition);
printf ("\n\n\n5.) Analyse\n\n");
if ((fp = fopen ("index.html", "r")) == NULL) {
perror ("Could not open file for statistic analyse");
exit (1);
}
caesarpasswd = (rand () % N_CH) + 'a';
for (i = 0; i < N_CH; i++)
table [i] = 0;
while ((ch = fgetc (fp)) != -1) {
if ((ch >= 'a') && (ch <= 'z')) {
table [(ch + caesarpasswd - 'a') % N_CH]++;
printf ("%c", (((ch - 'a') + (caesarpasswd - 'a')) % N_CH)+'a');
}
}
for (i = 0; i < N_CH; i++)
printf ("%c %i\n", i+'a', table [i]);
printf ("\nGeben Sie das erratene Passwort ein\n");
scanf ("%c", &userpassword);
if (caesarpasswd == userpassword)
printf ("richtig");
else
printf ("falsch");
printf ("\n passwort: %c\n\n", caesarpasswd);
fclose (fp);
return 0;
}