====== Beispielimplementierung der multiplikativen Verschlüsselung ====== Der Code ist lediglich zum Verstehen des Konzeptes gedacht. Es fehlen verschiedene Überprüfungen, zum Beispiel ob alle Zeichen überhaupt in Z_m abbildbar sind oder ob die Angabe von m oder dem Schlüssel überhaupt gültig sind. #include #include /** Länge der Zeichenkette bestimmen **/ int cstrlen(const char* str) { int i=0; while (str[i]) i++; return i; } /** euklidischer Algorithmus **/ int ggt(int a, int b) { /** r0=i r1=j r2=... **/ int i=b, j=a; if (a>b) { i=a; j=b; } int rest=1; while (rest>0) { rest=i%j; if (rest>1) { i=j; j=rest; } else if (rest==1) { return rest; } else { return j; } } return -1; } int main () { int max=0; printf ("Wie groß soll das Alphabet sein? (<=26): "); scanf("%d", &max); char str[100]={'\0'}; printf ("Zu verschlüsselnde Zeichenkette: "); scanf ("%s", str); int* teilerfremd=(int*) malloc (max*sizeof(int)); int ptr_teiler=0; /** Schlüssel sind teilerfremd zu max **/ printf ("mögliche Schlüssel: \n"); for (int j=2; j='A' && str[j]<='Z') { str[j]+='a'-'A'; } else if (str[j]<'a' || str[j]>'z') { int i=1+j; for (; str[i]; i++) { str[i-1]=str[i]; } str[i-1]='\0'; j--; } } printf ("Zeichenkette: %s\n", str); /** Verschlüsseln durch x=(a*schlüssel) % max **/ char* crypt=(char*) malloc (cstrlen(str)); for (int i=0; i