Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Moin leute,

ich versuche grade den text welcher vom user eingegeben wird über xor zu verschlüsseln und wieder zu entschlüsseln mit einem vorgegebenen key.

Der text wird zwar ver und auch endschlüsseld aber standig werdn kryptische zeichen hinzugefügt auserhalb der eingabe (siehe anhang eingabe war hallohallo).

leider finde ich nicht den fehler hoffe einer von euch kann mir helfen :D.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    int i = 0;
    char eingabe[99];//Text eingabe des Users 
    char key[6]="930901";//Verschlüsselungs Key
    char output[99];
    char decrypt[99];

	printf("eingabe\n");
	scanf(" %s", &eingabe);
	size_t eingabelen = strlen(eingabe);
	printf("strin=%d, von eingabelen\n",eingabelen);
	
	
    for(i = 0; i < eingabelen; i++)
    {
        output[i] = eingabe[i]^key[i]; //XOR verschlüsselung
		printf("\n%d",i);
    }
    printf("\noutput XORed: %s\n", output);
    //printf("\n");
	
	
	
    for(i = 0; i < eingabelen; i++)
    {
            decrypt[i] = output[i]^key[i]; //XOR entschlüsselung
    }
    printf("Un XORed: %s\n\n", decrypt);
    printf("\n");
    return 0;
}

Danke für euer Hilfe 🤘

Unbenannt.PNG

Wie soll auch das funktionieren, wenn dein Text länger ist als dein Key?

output[i] = eingabe[i]^key[i]; //XOR verschlüsselung

Dein Key muss zwangsläufig genauso lang sein, wie dein zu verschlüsselnder Text.

In anderen Sprachen würdest du eine "Index out of Range"-Exception bekommen. C hat aber keine Bereichsüberprüfung und er greift nun mit key[i] auf einen ungeschützten Bereich, wenn der Text länger ist, als der Schlüssel.

 

  • Autor

Jo ich versuche mich mal dran also im Endeffekt ka maximal 100 Zeichne oder so hätte ich jetzt gesagt.

Habe da keine speziellen Anforderungen mache ich grade nur Interesse halber noch nebenbei außerhalb der aufgaben. 

Der Rest läuft soweit dank euch :D🤙

  • Autor

Hmm hast du da vlt nen tipp komme da auf keinen grünen zweig 

    				for(i=0;i<strlen(eingabe);)
    				{
     					for(j=0;(j<strlen(key))&&(i<strlen(eingabe));j++)
     					{
      						numkey[i]=key[j]-'a';
							i++;
     					}
       				}
    
    				for(i=0;i<strlen(eingabe);i++)
    				{
     					numcipher[i]=numstr[i]+numkey[i];
   					}
    				for(i=0;i<strlen(eingabe);i++)
    				{
     					if(numcipher[i]>25)
     					{
      						numcipher[i]=numcipher[i]-26;
     					}
    				} 

habe versucht damit den key an die eingabe anzupassen kommt aber auch nur murx raus 

  • Autor

ok also kann den key ja in der theorie wiefolgt ändern.

char key[99]="930901"

somit habe ich den array auf max 99 zeichen erhöht oder nicht?  Und somit kann key die eingabe welche auch max 99 zeichen hat erreichen.

jetzt ist bloß die frage inwiefern ich key der eingabe anpasse.

im endefekkt müsste ja das programm die länge von dem array der eingabe mit dem array des keys vergleichen und dementsprechnd verlängern oder nicht?

  • Autor
vor 1 Minute schrieb Whiz-zarD:

Und wie willst du den Key verlängern?

das ist die frage 😂

vor 4 Minuten schrieb Whiz-zarD:

Was machst du bei längeren Texten?

die Eingabe wollte ich erst mal auf 100 Zeichen beschränken .

vor 2 Minuten schrieb Whiz-zarD:

Ist es nicht Verschwendung von Speicher, wenn der Text kürzer ist?

und ja das aufjedenfall aber das speicherproblem gehe ich an wenn ich mehr in der Materie stecke 😅

  • Autor

Soooo ein wenig überarbeitet.

allerdings spuckt er immer noch wirres zeug aus 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  int i = 0;
  char eingabe[99] = "This is a test string";
  char key[99] = '930901'; // Encryption key
  char output[99];
  char decrypt[99];
  size_t eingabelen = strlen(eingabe);
  size_t key_len = strlen(key);

  for (i = 0; i < eingabelen; i++) {
    output[i] = eingabe[i] ^ key[i % key_len]; // XOR verschlüsselung
  }
  printf("\noutput XORed: %s\n", output);

  for (i = 0; i < eingabelen; i++) {
    decrypt[i] = output[i] ^ key[i % key_len]; // XOR entschlüsselung
  }
  decrypt[i] = 0;  // Zero terminate
  printf("Un XORed: %s\n\n", decrypt);
  printf("\n");
  return 0;
}

 

 

  • Autor
Gerade eben schrieb Rienne:

aber war es nicht so, dass man den Key einfach erneut von vorne benutzt, sobald man die Länge des Keys erreicht hat?

genau so hatte ich mir das auch vorgestellt aber ich weiß nicht so genau wie ich das umsetzte.

vor 8 Minuten schrieb Rienne:

Liegt vielleicht daran, dass du das Array vom Key auf 99 Zeichen gesetzt hast, aber der Inhalt nur 6 Zeichen lang ist.

Würde ich auch mal vermuten. Hab mich aber schon lange nicht mehr mit C beschäftigt. Die Initialisierung ist ja vom System abhängig. Unter Linux werden Variablen mit 0 initialisiert. Unter Windows gar nicht. Da könnte durchauch Datenmüll drinnenstehen. Da sollte man immer schauen, dass man Variablen sinnvoll initialisiert.

vor 7 Minuten schrieb Pizzacorgie28:

hmm gute frage selbst wenn ich den array komplett fülle kommt da ihrgentwie murx bei raus 

Welchen Array und wie?

Wenn der Key doch sowieso fest ist, kannst du doch auch von Anfang an die Länge anpassen. Also

char key[6] = "930901"; // Encryption key
size_t key_len = 6;

 

Bearbeitet von Rienne

  • Autor
vor 2 Minuten schrieb KeeperOfCoffee:

Uhm ... ich mach ja sonst nichts mit C++, aber im ersten Post war Key mit Anführungszeichen, im zweiten mit einfach Anführungszeichen.

Wenn ich deinen Code auf cpp.sh teste funtkioniert er nur mit einfachen Anführungzeichen...

kannst du einmal reinschreiben was du meinst? 

" " ?

oder ' ' die gehen nämlich nicht hatte das testweise versucht ohne erfolg veregesen das wieder zu ändern vor dem einfügen.

 

Gerade eben schrieb Rienne:

Welchen Array und wie?

oh sry key meinte ich einfach den key also  930901 so heufig hintereinander geschrieben bis array voll xD

vor 3 Minuten schrieb KeeperOfCoffee:

Uhm ... ich mach ja sonst nichts mit C++, aber im ersten Post war Key mit Anführungszeichen, im zweiten mit einfach Anführungszeichen.

Stimmt. Hab es mal Online ausgeführt. Die einfachen Anführungszeichen führen bei einem Online Compiler zu einem Compilefehler. Wenn ich sie durch doppelte Anführungszeichen ändere, dann sieht es gut aus.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.