Mamutfrage RSA --> Fehlersuche
-
Hi liebe Community, also ich schreib grad ein verschlüsselungsprogramm und das soll auch eine art rsa verschlüsselung enthalten jetzt hab ich die soweit auch geschrieben aber irgend wie haut sie nicht hin:( und ich find auch nicht wirklich den Fehler) ich hoffe mir einer von euch kann mir Helfen.
Vorweg entschuldigt die Rechtschreibung und hier erst mal mein quellcode
Die selbst definierten Datentypen
// Datentypen, welche fuer RSA - benoetigt werden // key --> beinhaltet alle bestandteil des privat und public - keys struct key { long int s; //Teil des oeffentlichen schluessels long int t; //Teil des privaten schluessels long int k; //RSA Modul }; typedef struct key key; // Public key struct publickey { long int s; //Oeffentlicher exponent long int k; //RSA Modul }; typedef struct publickey publickey; // Private key struct privatkey { long int t; //Geiheimexponent long int k; //RSA Modul }; typedef struct privatkey privatkey;
Hier alles was mit der Schlüsselerzeugung zu tun hat:
// menue fue die rsa schluesselerzeugung (rsacreatekeymenue()) // Diese Funktion realisiert das Menue fuer die erzeugung des RSA - Schluesselpaares unter zuhilfenmahme der Funktion creatersakey(), aus der // File rsa.c. Dabei werden die Schluessel seperat in zwei datein gespeichert die der Nutzer angeben muss // Parameter: //--> keine // Rueckgabewert //--> int (0-->alles ok, 1--> Pointerinitialiesierungsfehler) int rsacreatekeymenue() { // Variablendeffinition -belegung int flag; char pfad[255]; // Pfadangabe // Zeiger auf Datei FILE *file; // Zeiger auf datei // Pointerdeffinition key *key; //Typdef key // Pointe - Initialisierung key = malloc(sizeof(key)); // Pruefen ob Initialiesierung erfolgreich if (key == NULL){ return 1; //Fehler beim Initialisieren von key } // Konsole leeren clearconsole(); // Private und Public key erzeugen ueber Funktionsaufruf creatersakey (key *key) creatersakey (key); // Nutzer informieren printf("Das RSA - Schluesselpaar wurde erfolgreich erzeugt!\n\n"); // Wo sollen die Schluessel gespeichert werden // Public Key do { // Entscheidungsvariable vordeffinieren flag = 0; // Nutzer zur eingabe auffordern printf("Geben sie bitte den Pfad, in dem der PublicKey gespeichert wird, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Datei oeffnen file = fopen(pfad,"w"); // Datei erstellen if (file==NULL) { // Fehler printf("Die Datei <%s> konnte nicht erstellt werden!", pfad); getchar(); flag = 1; } else { // Datei beschreiben if (fprintf(file, "%li %li",key->s, key->k)<=0) { //Fehler beim schreiben in die Datei printf("Der Public Key konnte nicht in die Datei <%s> geschrieben werden.", pfad); getchar(); flag = 1; } else { printf("Der Public Key wurde erfolgreich in die Datei <%s> geschrieben.\n\n", pfad); getchar(); } } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); // Datei schliesen fclose(file); } while (flag==1); // Privat Key do { // Entscheidungsvariable vordeffinieren flag = 0; // Nutzer zur eingabe auffordern printf("Geben sie bitte den Pfad, in dem der Private Key gespeichert wird, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Datei oeffnen file = fopen(pfad,"w"); // Datei erstellen if (file==NULL) { // Fehler printf("Die Datei <%s> konnte nicht erstellt werden!", pfad); getchar(); flag = 1; } else { // Date beschreiben if (fprintf(file, "%li %li",key->t, key->k)<=0) { //Fehler beim schreiben in die Datei printf("Der Private Key konnte nicht in die Datei <%s> geschrieben werden.", pfad); getchar(); flag = 1; } else { printf("Der Private Key wurde erfolgreich in die Datei <%s> geschrieben.\n\n", pfad); getchar(); } } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); // Datei schliesen fclose(file); } while (flag==1); // Speicherbereinigung free(key); // Rueckgabewert return 0; }
// Schluellerzeugungs - Funktion fuer RSA - Schluessel (void create_rsa_key (key *key)) // Funktion welche die schluessel fuer die RSA - Verschluesselung erzeugt (privat, public - key) die schluessel werden über den zeiger // key zurueckgegeben. // Parameter: //--> key *key (Schluesselvariable) // Rueckgabewert: //--> keine da void void creatersakey (key *key) { // Variablendeffinition/ -belegung long int p, q; //Variablen zur speicherung der primzahlen long int k; //RSA - Modul, teil des oeffentlichen schluessels long int m; //eulerische Funktion long int s; //teil des oeffentlichen Schluessels long int t; //geheimer exponent int flag; //einfache entscheidungsvariable // p und q mit primzahlen belegen p = primzahl(); // kleine schleife damit p !=q sehr geringe wahrscheinlichkeit muss aber dennoch geprueft werden do { q = primzahl(); } while(p==q); // RSA-Modul, k ermitteln k = p*q; // eulerische funktion anwenden und m ermitteln m = ((p-1)*(q-1)); // s ermitteln unter zuhilfenahme der funktion ggt srand(time(0)); // es soll ja auch wirklich zuefallig sein // s muss teilfremd zu m sein also wird probiert do { s = rand()%m+1; if (ggt(s,m) == 1) { //teilfremd von m flag = 0; } else { //nicht teilfremd also noch mal flag = 1; } } while(flag == 1); // t ermitteln t = erweuklalgrsa (s, m); // t kann negatif sein also aendern wir das if(t<0){ do { t=t+m; // Legetim da a^f(n) mod n = 1 (Satz von Euler-Fermat), somit ist a^n = a^n * 1 } while(t<0); //= a^n * a^f(n) = a^(n+f(n)) (mod n) } // Schluessel erzeugung ist fertig, hinterlegung der Schluessel in zwei sepperate datein key->s = s; key->k = k; key->t = t; }
Hier alles was mit der codierung zu tun hat
// Menue fuer die RSA - Verschluesselung (rsacodedmenue()) // Diese Funktion Realisiert das Menue fuer die RSA - Verschluesselung unter zuhilfenahme der Funktion rsacoded aus der rsa.c file. // Das menue realisiert die gesamten voreinstellungen welche fuer die Funktion rsacoded benoetigt werden. Dazu gehoeren die pointer // auf die in und out files hinter dennen sich die Datein fuer den klartext und den verschluesselten text befinden sowie die bereitstellung // des Public Key. // Anmerkung: es findet keine Pruefung statt ob sich in der Datei ein wirklicher Public Key befindet, dies waehre eine evtl. verbesserung // welche mit der naechsten Version realisiert werden koennte. // Parameter //--> keine // Rueckgabewert //--> int (0--> alles ok, 1-->Fehler bei Pointerinialiesierung) int rsacodedmenue() { // Variablendeffinition -belegung int flag; // Entscheidungsvariable char pfad[255]; // Pfadangabe char zs[100]; // Zeiger auf Datei FILE *in; // Zeiger auf Datei in die der Cheffrierte text geschrieben wird FILE *out; // Zeiger auf Datei in der sich der Klartext befindet bzw. der Public key // Pointerdeffinition publickey *publickey; //Typdef publickey // Pointe - Initialisierung publickey = malloc(sizeof(publickey)); // Pruefen ob Initialiesierung erfolgreich if (publickey == NULL){ return 1; //Fehler beim Initialisieren von key } // Ermitteln des Public Key do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo die key-datei ist printf("Geben sie bitte den Pfad, in dem sich der Public Key befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Datei oeffnen und key herausschreiben out = fopen(pfad,"r"); // Oeffnen if (out==NULL) { // Fehlerhafter pfad, erneute pfad abfrage printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } else { // Datei konnte geoffnet werden // Schluessel lesen fscanf(out,"%li %li",&publickey->s, &publickey->k); printf("Der Public Key <%li;%li> wurde erfolgreich aus der Datei <%s> gelesen.",publickey->s, publickey->k, pfad); getchar(); // Datei schliesen fclose(out); } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while(flag==1); // Klartext oeffnen do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo der Klartext ist printf("Geben sie bitte den Pfad, in dem sich der Klartext befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Ist die Datei vorhanden, Oeffnen der Datei zum lesen out = fopen(pfad,"r"); if (out==NULL) { // Datei nicht vorhanden printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while (flag==1); // cheffrierten text oeffnen do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo der Klartext ist printf("Geben sie bitte den Pfad, in dem sich der Cheffrierte Text befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Ist die Datei vorhanden, Oeffnen der Datei zum lesen in = fopen(pfad,"w"); if (in==NULL) { // Datei nicht vorhanden printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while (flag==1); // Aufruf der rsacoded() funktion rsacoded(publickey, in, out); // Speicherbereinigung free(publickey); // Datei schliesen fclose (in); fclose(out); // Rueckgabewert return 0; }
// RSA Verschluesseln - Funktion (rsacoded(publickey publickey, FILE *in, FILE *out)) // Diese Funktion verschluesselt den Inhalte einer Datei welche den klartext enthaelt und schreibt den verschluesselten Text // in eine seperate Datei. Aus den Klartext werden jeweils zwei zeichen gelesen welche in einer Long Int variablen hinterlegt werden // dieser werd wird ueber die Formel Klartext^Oeffentlicher Exponent % RSA Modul maniepuliert (unter zuhilfenahme der Funktion // moduloexponentiation()) dieser maniepulierte wert wird in die neue Datei geschrieben // Parameter: //--> publickey *publickey (Schluessel zum verschluesseln) //--> FILE *in (Datei die verschluesselten Text beinhaltet) //--> FILE *out (Datei welche den Klartext enthaelt) //Rueckgabewert: //--> keiner da void void rsacoded(publickey *publickey, FILE *in, FILE *out){ // Variablendeffinition -belegung int flag = 0; // Entscheidungsvariable int zs1, zs2; // Zwischenspeicher fuer das einlesen des Klartextes long int k; // Variable zur hinterlegung der zusammengelegten zs1 und zs2 long int ch; // Variable fuer den Cheffrierten text char c; // Zwischenspeicher fuer char // Schleife zur abarbeitung der Verschluesselung do { // Herauslesen von zwei zeichen aus der Klartext Datei // erstes zeichen c = fgetc(out); // Ist Datei ende erreicht if (c != EOF){ // Nein zs1 = c; // zweites zeichen c = fgetc(out); // ist Datei ende erreicht if (c != EOF){ // Nein zs2 = c; } else { zs2 = 32; // Lerzeichen flag = 1; } } else { flag = 1; } // Zusammfuegen zu einen Long Int Wert k = (zs1*1000)+zs2; // Start der Codierung ch = moduloexponentiation(k, publickey->s, publickey->k); // Schreiben in die Datei in fprintf(in, "%li ",ch); } while (flag == 0); }
Hier alles was mit der decodierung zu tun hat
// Menue fuer die RSA - Entschluesselung (rsadecodedmenue()) // Diese Funktion Realisiert das Menue fuer die RSA - Entschluesselung unter zuhilfenahme der Funktion rsadecoded aus der rsa.c file. // Das menue realisiert die gesamten voreinstellungen welche fuer die Funktion rsadecoded benoetigt werden. Dazu gehoeren die pointer // auf die in und out files hinter dennen sich die Datein fuer den klartext und den verschluesselten text befinden sowie die bereitstellung // des Private Key. // Anmerkung: es findet keine Pruefung statt ob sich in der Datei ein wirklicher Private Key befindet, dies waehre eine evtl. verbesserung // welche mit der naechsten Version realisiert werden koennte. // Parameter //--> keine // Rueckgabewert //--> int (0--> alles ok, 1-->Fehler bei Pointerinialiesierung) int rsadecodedmenue() { // Variablendeffinition -belegung int flag; // Entscheidungsvariable char pfad[255]; // Pfadangabe char zs[100]; // Zeiger auf Datei FILE *in; // Zeiger auf Datei in die der Klarttext geschrieben wird FILE *out; // Zeiger auf Datei in der sich der chiffrierte Text befindet bzw. der Private key // Pointerdeffinition privatkey *privatkey; //Typdef privatkey // Pointe - Initialisierung privatkey = malloc(sizeof(privatkey)); // Pruefen ob Initialiesierung erfolgreich if (privatkey == NULL){ return 1; //Fehler beim Initialisieren von key } // Ermitteln des Private Key do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo die key-datei ist printf("Geben sie bitte den Pfad, in dem sich der Private Key befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Datei oeffnen und key herausschreiben out = fopen(pfad,"r"); // Oeffnen if (out==NULL) { // Fehlerhafter pfad, erneute pfad abfrage printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } else { // Datei konnte geoffnet werden // Schluessel lesen fscanf(out,"%li %li",&privatkey->t, &privatkey->k); printf("Der Private Key <%li;%li> wurde erfolgreich aus der Datei <%s> gelesen.",privatkey->t, privatkey->k, pfad); getchar(); // Datei schliesen fclose(out); } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while(flag==1); // Chiffrierten Text oeffnen do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo der Klartext ist printf("Geben sie bitte den Pfad, in dem sich der Chiffrierte Text befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Ist die Datei vorhanden, Oeffnen der Datei zum lesen out = fopen(pfad,"r"); if (out==NULL) { // Datei nicht vorhanden printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while (flag==1); // cheffrierten text oeffnen do { // Entscheidungsvariable vordeffinieren flag = 0; // Konsole leeren clearconsole(); // Abfrage wo der Klartext ist printf("Geben sie bitte den Pfad, in dem sich der Klartext befindet, an!\n\n"); // Eingabe von Nutzer printf("> "); scanf("%254[^\n]", &pfad); // Ist die Datei vorhanden, Oeffnen der Datei zum lesen in = fopen(pfad,"w"); if (in==NULL) { // Datei nicht vorhanden printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad); getchar(); flag = 1; } // Eingabepuffer loeschen while (getchar() != '\n' && getchar() != EOF); } while (flag==1); // Aufruf der rsadecoded() funktion rsadecoded(privatkey, in, out); // Speicherbereinigung free(privatkey); // Datei schliesen fclose (in); fclose(out); // Rueckgabewert return 0; }
// RSA Entschluesseln - Funktion (rsadecoded(privatekey *privatekey, FILE *in, FILE *out)) // Diese Funktion entschluesselt den Inhalte einer Datei welche den chiffrierten text enthaelt und schreibt den entschluesselten Text // in eine seperate Datei. Aus den cheffrierten Text wird jeweils ein block gelesen vom typ long int, dieser werd wird ueber // die Formel Chiffrierter Text^Geheim Exponent % RSA Modul maniepuliert (unter zuhilfenahme der Funktion // moduloexponentiation()) dieser maniepulierte wert wird nun in zwei int werte auseinander genommen und mithilfe der ASCII Tabelle in // die Zeichen umgewandelt welchen sie symbolisieren diese zwei char werden in die neue Datei geschrieben // Parameter: //--> privatekey *privatkey (Schluessel zum verschluesseln) //--> FILE *in (Datei die Klartext beinhaltet) //--> FILE *out (Datei welche den verschluesselten Text enthaelt) //Rueckgabewert: //--> keiner da void void rsadecoded(privatkey *privatkey, FILE *in, FILE *out) { // Variablendeffinition -belegung int flag = 0; // Entscheidungsvariable long int k; // Variable zur hinterlegung der zusammengelegten zs1 und zs2 long int ch; // Variable fuer den Cheffrierten text int zs1, zs2; // Zwischenspeicher // Schleife zur abarbeitung der Entschluesselung do { // Herauslesen der Bloecke aus den Cheffrierten Text if (fscanf(out, "%li", &ch) != EOF) { // Dateiende noch nicht erreicht // Start der Decodierung k = moduloexponentiation(ch, privatkey->t, privatkey->k); // Block auseinander brechen zs2 = k % 1000; zs1 = k / 1000; // ASCII Werte in zeichen umwandeln und in Datei schreiben fprintf(in, "%c%c", zs1, zs2); } else { // Dateiende erreicht verlassen der Schleife flag = 1; } } while(flag==0); }
Und nun noch alle mathematischen Funktion die ich verwende
// primzahl - Funktion (long int primzahl()) // Die Primzahl Funktion ermittelt eine Primzahl unter zuhilfenahme des Both Force III ansatzes // Parameter: //--> keine // Rueckgabewert: //--> long int long int primzahl() { // Variablendefinition - belegung long int a; //Hier wird die wahrscheinliche Primzahl gespeichert int i; //Zaehlvariable int flag; //einfache entscheidungs - variable // Voreinstellung fuer das ermitteln der Zuffalszahl srand(time(0)); // Ermitteln der Primzahl beginnt mit abarbeitung der Schleife do { // entscheidungsvariable zuruecksetzten flag = 0; // Zufallszahl ermitteln a =rand()%40000+10000; // prüfen ob es eine Primzahl ist if (a % 2 == 0) { flag = 1; } // Versuche variable a mit den ungeraden Zahlen von 3 bis sqrt(a) zu teilen! for (i = 3; i <= sqrt(a); i = i + 2) { if (a% i == 0) { //Teilertest flag = 1; } } // Wenn es hier rausgeht dann ist a eine Primzahl }while (flag == 1); // Rueckgabe der Primzahl return a; } // Groester Gemeinsamer Teiler - Funktion (long int ggt(long int a, long int b)) // Die Funktion ggt, ermittelt den groeßten gemeinsammen teiler // Parameter: //--> long int a(zahl 1) //--> long int b(zahl 2) // Rueckgabewert: //--> long int long int ggt( long int a, long int b) { if (a == 0) { // Wenn a=0 ist b der größste gemeinsame Teiler laut Definition // Rueckgabe des ggt return b; } while(b != 0) { // Solange wiederholen, solange b nicht 0 ist. if (a > b) { a = a - b; // Wenn a größer als b subtrahiere b von a. } else { b = b - a; // In jedem anderen Fall subtrahiere a von b. } } // Rueckgabe des ggt return a; // In a steht jetzt der größste gemeinsame Teiler von a und b. } // Erweiterter Euklidischer Algoritmus - Funktion (long int erweuklalgrsa (long int a, long int b)) // Hierbei handelt es sich um eine Funktion welche im wesentlichen den erweiterten euklidische Algorithmus beinhaltet // jedoch soweit abgeandert wurde das die Funktion den geheimexponenten des RSA Schluessels als rueckgabe wert liefert // Parameter: //--> long int a(zahl 1) //--> long int b(zahl 2) // Rueckgabewert: //--> long int long int erweuklalgrsa (long int a, long int b){ // Variablendeffinition - belegung long int u, v, q, r, s, t; u=t=1; v=s=0; // Die eigentliche abarbeitung findet statt while (b>0) { q=a/b; r=a-q*b; a=b; b=r; r=u-q*s; u=s; s=r; r=v-q*t; v=t; t=r; } // Rueckgabewert return u; } // Module exponent - Funktion (long int moduloexponentiation(long int b, long int e, long int n)) // Funktion welche eine module exponentation durchfuehrt (b^e) % n, welche fuer RSA benoetigt wird // Parameter: //--> long int b (basis) //--> long int e(exponent) //--> long int n(mod) // Rueckgabewert: //--> long int long int moduloexponentiation(long int b, long int e, long int n){ // Variablendeffinition - belegung long int r = 1; // Lets go while (e != 0){ if (e % 2 == 0) { // gerade b = (b*b)%n; e = e/2; } else { // ungerade e = e - 1; r = (r*b)%n; } } // Rueckgabewert return r; }
so das ist der Quellcode gewesen dieser ist noch in ein menü eingebunden weil die RSA ja nur ein teil des Programmes ist, aber da liegt der Fehler definitiv nicht. Ich hab es jetzt schon ein paar mal probiert aber es haut nicht richtig hin ich geb euch mal meinen letzten durchlauf.
Ich hab mir ein schlüsselpaar erzeugen lassen pub (publickey) pri (privatkey), die Datei a.txt symbolisiert den Klartext, diese lass ich verschlüsseln und den entstandenen Quellcode lass ich in b.txt hineinschreiben. Diesen lasse ich nun wieder entschlüsseln in die Datei c.txt und hier das ergebniss
Inhalt pub
"25613 596570363"Inhalt pri
"67213493 596570363"Inhalt a.txt
"ABCDEFGH"Inhalt b.txt
"-324893208 0 288842526 55194990 0 "Inhalt c.txt
"à f<¹¡ "So ich hoffe jemand kann mir helfen und ich blamiere mich nicht vollständig:( aber auf jeden fall tausend dank für jeden der es überhaupt bishier her geschafft hat.
-
Was glaubst du, warum sollte sich jemand die Mühe machen, einen Fehler in deinem Code zu suchen? Es ist vielleicht wirklich nicht ganz einfach, geb ich zu. Schade, dass es hier keine strengeren Regeln gibt, wie in den meisten anderen Foren. Was hast du denn schon selber gemacht, um den Fehler einzugrenzen? Was genau geht nicht? Du könntest höchstens nach Ideen Fragen, wie man den Fehler eingrenzen kann, und nicht einfach deinen ganzen Code hinklatschen und sagen, so, viel Spass beim Suchen, ich leg erstmal die Füße hoch.
-
- irgendwelche Compilerfeatures abschalten
- Compilerwarnstufe hochsetzen
- erst dann wieder hier aufschlagen, wenn 0 Warnungen
- konkreten Testfall überlegen
- mit konkreter Fehlerbeschreibung und Frage hier aufschlagen-- char c für fgetc muss int sein
-- fopen(...,"rb") sollte hierbei immer binär sein statt "r"
-- zu mehr habe ich jetzt keine Lust
-- ...
-
ok, erst mal bin ich nicht so ein depp der hier einfach sein code reinschreibt und dann die füße hochlegt und die anderen nach seinen Fehlern suchen lässt ich hab die letzten drei stunden nach den Fehler gesucht und alles mögliche abgeändert und ausprobiert.
zweitens verlange ich nicht das jetzt jemand kommt und sagt genau da ist dein Fehler ich währe in allgemeinen schon sehr dankbar wenn mir jemand der schon mal mit rsa rum gespielt hat mir sagen könnte das mein Fehler vielleicht da liegt bzw. die Möglichkeiten eingrenzt wo der Fehler sein könnte.
Des weiteren gibt mir mein Compieler keine Warnungen aus, der konkrete Testfall wurde von mir durchgeführt und am ende beschrieben und sehr viel mehr kann ich da leider nicht tun wenn ich genau wüsste wo der Fehler liegt hätte ich das gesagt aber die warheit ist das ich ihn nicht genau eingrenzen kann ich kann lediglich einige vermutungen aufstellen und da währe eine das meine Schlüsselerzeugung fehlerhaft ist aber auch hier muss ich sagen dass ich leider keinen Fehler finde. Aber bevor ich hiuer jetzt nur mit vermutungen und einigen codeschnipsel auftauche wollte ich lieber alles reinschreiben da ich den Fehler nicht eingrenzen kann, könnte ich das würde ich das tun.
Zu letzt danke für die konspirative kritik von dir wutz ich werd sie umsetzten allerdings dürfte dass nicht erklären dass die Verschlüsselung und entschlüsselung nicht hinhaut.
Jetzt möchte ich eigentlich nur noch ein was los werden was mir einigemale hier aufgefallen ist nähmlich ob diese latente gewaltbereitschaft in den Forum sein muss ich mein es gibt hier echt super leute die ein schnell und quallitatif hochwertige antworten geben und dann gibt es wiederum welche die einen einfach nur von vornerein schlecht machen, auch wenn man die sprache erst gerade gelernt hat.
-
Hierbei möchte ich noch eine weitere eingrenzung machen:
Die einzelnen menüs dürften nicht die Fehlerquelle sein ebenso wenig die mathematischen (kann ich mir zumindest nicht vorstellen) wodurch eigentlich nur noch diese Funktion:
creatersakey(), rsacoded(), rsadecoded() sowie die mathematische Funktion moduloexponentiation() (bei der ich mir auch noch unsicher bin übrig bleibt)
übrig bleiben.
Wie gesagt vielen dank an alle die es zumindest probieren mir zu helfen
-
Konstantin1507 schrieb:
Zu letzt danke für die konspirative kritik von dir wutz [...]
-
so jetzt kann ich dass ganze noch mehr eingrenzen ich hab mal das wiki beispiel durchgespielt und es liegt eindeutig an der ver und entschlüsselungsfunktion also an rsacoded(...) und rsadecoded(...) und dementsprechend meiner meinung nach könnte der Fehler evtl. auch an der moduloexponentiation(...) Funktion liegen. soweit mein Fortschritt bei der Fehlersuche bzw. eingrenzen.
-
Boah! Das ist ja noch nicht einmal eine vollständiges Programm. Das heißt, du erwartest, dass jemand dein mäßig beschriebenes Problem allein durch Anstarren von 600 Zeilen Code löst? Bist du des Wahnsinns? Auch wenn du abstreitest, dass du es so meinst, so ist doch die Faktenlage, dass du hier 600 Zeilen Code mit der Angabe postest, dass da irgendwo ein Fehler drin ist. Und wir dürfen den Fehler nicht einmal nachvollziehen, sondern müssen dir glauben, dass du den relevanten Code korrekt identifiziert hast! Glaubst du, irgendwer wird auch nur in Erwägung ziehen, sich das anzusehen?
Zumal: 600+ Zeilen (und da kommt ja noch mehr dazu für das Hauptprogramm) für RSA? Wie hast du das denn geschafft?
edit: Bei genauerem Hinsehen sind davon 350 Zeilen Kommentar. Was die Sache in normale Größenordnungen befördert, aber abschreckend ist es trotzdem.
-
Wenn Dir 0 Warnungen angegeben werden, setz mal die Compiler-Warnstufe hoch. Alleine so Späße wie fgetc mit Rückgabewert char wären Dir bei entsprechender Warnstufe schon gemeldet worden.
Ansonsten initialisiere mal Deine Variablen.