Verschlüsselung



  • besten dank erstmal. habe mir das mal ein bisschen angeschaut.

    bin nun auf folgendes resultat mit root 47 gekommen:

    for(stringstelle = 1; stringstelle < enter_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           newtext[stringstelle] = text[stringstelle] + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           newtext[stringstelle] = 33 + (-127 + text[stringstelle] + 47);
           }
         }
    

    nun zu meiner frage. wie kann ich diesen teil text[stringstelle] in einen int wandeln? sprich einfach sting in ascii-dezimal..



  • Hallo

    bin nun auf folgendes resultat mit root 47 gekommen:

    Das soll wohl eher ROT 47 heißen, für Rotation.

    wie kann ich diesen teil text[stringstelle] in einen int wandeln?

    int ascii = text[stringstelle];
    

    bis bald
    akari



  • besten dank. das funktioniert erstmal.ja wollte eigentlich rot47 schreiben..

    // Stringstellen (ASCII Dezimal) um 47 erhöhen
      for(stringstelle = 1; stringstelle < enter_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           ascii = text[stringstelle];
           newtext[stringstelle] = ascii + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           ascii = text[stringstelle];
           newtext[stringstelle] = 33 + (-127 + ascii + 47);
           }
         }
    

    Wie kann ich nun den Int-Wert in einen ASCII-Wert wandeln? IntToStr()geht ja mal logischerweise nicht.. Eine Funktion um Int to ASCII zu wandeln, habe ich irgendwie auch nicht gefunden. Gibt es da eine Möglichkeit?



  • Hallo

    😕
    Was ist für dich den ein "ASCII-Wert"? Doch wohl offensichtlich eine ganze Zahl. Und Zahlen werden in ints gespeichert. Also brauchst du keine Umwandlung von int nach "ASCII"

    bis bald
    akari



  • naja ich will ja dann den Int-Wert in einen String wandeln. Sprich nach der ASCII-Tabelle gäbe ja dann 90 -> Z

    habe mich wohl falsch ausgedrückt.

    sprich ascii + 47 geben einen wert zusammen. eben z.b 90 und nun muss ich irgendwie aus 90 den String Z rausbekommen.

    newtext[stringstelle] = ascii + 47;

    hoffe ist nun verständlich genug geschrieben.



  • Hallo

    newtext[stringstelle] = ascii + 47;
    

    und was hindert dich, genau das einmal auszuprobieren?

    bis bald
    akari



  • akari schrieb:

    Hallo

    newtext[stringstelle] = ascii + 47;
    

    und was hindert dich, genau das einmal auszuprobieren?

    bis bald
    akari

    hm, da kommt bei mir eine Fehlermeldung.. Exception in der Klasse ERangeError.. Meldung: ". Prozess wurde angehalten....



  • Hallo

    das ist also ein Laufzeit-Fehler.
    Und die besagt das dein stringstelle außerhalb des gültigen Bereichs ist, der von 1 bis newtext.Length() geht. Also setzte deinen Debugger ein und finde den Grund dafür.
    Mit der Umwandlung an sich hat das nichts zu tun.

    bis bald
    akari



  • String Tfrmmain::func_readstring(String text, int rotart)
    {
    unsigned int stringstelle;
    unsigned int string_len;
    unsigned int ascii;
    String newtext;
    
    string_len = text.Length();
    
    if(rotart == 47)
      {
      // Stringstellen (ASCII Dezimal) um 47 erhöhen
      for(stringstelle = 1; stringstelle < string_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           ascii = text[stringstelle];
           newtext[stringstelle] = ascii + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           ascii = text[stringstelle];
           newtext[stringstelle] = 33 + (-127 + ascii + 47);
           }
         }
      }
    else if(rotart == 5)
      {
      //
      }
    }
    

    das ist mal mein Code. Also sobald ich das:
    newtext[stringstelle] = ascii + 47;
    durch dieses hier
    text[stringstelle] = ascii + 47;
    ersetze dann funktionier das ganze..

    Wie kann den das sein? newtext ist ein String und text ist auch ein String.. Sehe den Fehler oder das Problem überhaupt nicht..



  • Hallo

    ja beide sind vom Typ String. Aber im Gegensatz zu text ist newtext leer. Das heißt die Länge von newtext ist 0.
    Am einfachsten ist es wenn du am Anfang einfach den Inhalt und damit auch die Länge kopierst.

    String newtext = text;
    

    bis bald
    akari



  • ok besten dank. funktioniert nun bestens so.

    für andere: hatte noch ein fehler in der for-Anweisung

    for(stringstelle = 1; stringstelle < string_len + 1; stringstelle++)
    


  • Hallo

    ja stimmt. Ich würde es aber lieber so schreiben

    for(stringstelle = 1; stringstelle <= string_len; stringstelle++)
    

    bis bald
    akari



  • Stringfunktionen sind für Verschlüsselungsalgorithmen völlig ungeeignet, da alle bei einem Zeichen mit dem Inhalt 0x00 den Dienst beenden....


Anmelden zum Antworten