/media/sda-magnetic/david/Dok-15-2023-11-27/informatik/crypt-2023-11-28/cryptexrs01.c


#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;
}