Einfache String Verschlüsselung



  • Mit welcher Verschlüsselung kann ich einfach Strings verschlüsseln und dann auch wieder entschlüsseln? Ich möchte einen Unicode String, der unter anderem auch kyrillische Zeichen enthält verschlüsseln und dann später wenn er gebraucht wird wieder entschlüsseln. Letztendlich geht es mir zuerst nur darum das der String nicht im plain text vorliegt, das man mit debugging tricks sowieso an den String kommt weiß ich.

    Ich suche also eine kleine aber sichere Verschlüsselungsmethode, mit der ich Unicode Strings verschlüsseln und entschlüsseln kann. Ich möchte ungern eine ganze Library importieren wie Crypto++, da sich das ganze nur um einen einzigen String handelt. Eine Klasse oder auch zwei Funktionen(verschlüsseln & entschlüsseln) wären mir am liebsten.

    Hat da jemand was?



  • wenn man den string nur nicht lesen soll, dann nimm eine xor-verschlüsselung, die ist leicht zu knacken, aber man kann den string nicht mehr lesen 😃

    Edit: http://www.cplusplus.com/forum/articles/38516/



  • Ich glaube, Blowfish lässt sich schön kurz aufschreiben. Implementierungen findest du hier:
    http://www.schneier.com/blowfish-download.html

    Ob die Lizenz-mäßig in Frage kommen, musst Du selbst mal gucken.

    Aus deinen String machste am besten eine UTF-8 Byte Sequenz, die durch Blowfish in einem vernünftigen Modus wie z.b. CBC jagst.



  • wenn man den string nur nicht lesen soll, dann nimm eine xor-verschlüsselung, die ist leicht zu knacken, aber man kann den string nicht mehr lesen

    Sowas würde mir in der Tat schon reichen, nur kann man mit XOR auch einen wchar_t String verschlüsseln?

    Aus deinen String machste am besten eine UTF-8 Byte Sequenz, die durch Blowfish in einem vernünftigen Modus wie z.b. CBC jagst.

    Geht das auch ohne Datenverlust? Ist BYTE nicht als unsigned char definiert, mein String ist jedoch ein wchar_t. Ich kenne mich mit Zeichensätzen nicht ganz so gut aus. 🙄



  • sntrncpyme schrieb:

    Sowas würde mir in der Tat schon reichen, nur kann man mit XOR auch einen wchar_t String verschlüsseln?

    Ja, xor ist doch der Zeichensatz egal. Du xor'st einfach jedes Byte, fertig. 🙂



  • Okay, danke an alle.
    Werde mich jetzt mal in die ganze XOR Sache reinlesen und wenn ich noch fragen habe poste ich hier.



  • Kann hier nicht editieren, sorry muss als neuen Post machen.
    Jetzt zu meinem Problem, habe mich erstmal an dem Beispiel gehalten.

    Das hier klappt wunderbar:

    wstring toEncrypt = L"Test";
    wchar_t keyToEncrypt = 'd';
    
    for (int temp = 0; temp < toEncrypt.size(); temp++)
    	toEncrypt[temp] ^= keyToEncrypt;
    wcout << "The encrypted data = " << toEncrypt;
    
    for (int temp = 0; temp < toEncrypt.size(); temp++)
    	toEncrypt[temp] ^= keyToEncrypt;
    wcout << "\nThe unencrypted data = " << toEncrypt;
    

    Wenn ich jetzt aber zu toEncrypt dieses Zeichen hinzufüge:
    "U+04EE: Großer kyrillischer Buchstabe U mit Macron"
    dann geht es nicht mehr? 😕



  • Ich pushe hier einfach mal. 🙄

    Habe es immer noch nicht hinbekommen,
    hab nun wirklich alles ausprobiert.



  • http://ideone.com/7sLNx

    #include <iostream>
    #include <string>
    
    void simple_xor(void* data, std::size_t size, const std::string& password)
    {
      char* p = static_cast<char*>(data);
      for (std::size_t i = 0; size-- != 0; ++i)
        *p++ ^= password[i % password.size()];
    }
    
    int main()
    {
      std::string data = "Guten Tag, ich bin geheim!";
      std::string password = "blubb";
      simple_xor(&data[0], data.size(), password);
      simple_xor(&data[0], data.size(), password);
      std::cout << data << '\n';
    }
    

  • Mod

    All dein Pushen nützt wenig, wenn deine Problembeschreibung

    dann geht es nicht mehr? 😕

    ist. Was möchtest du wissen?

    Ich kann mir nicht einmal vorstellen, welche Art von Problem du haben könntest:
    http://ideone.com/shnKW



  • Wenn ich jetzt aber zu toEncrypt dieses Zeichen hinzufüge:
    "U+04EE: Großer kyrillischer Buchstabe U mit Macron"

    Ja, xor ist doch der Zeichensatz egal. Du xor'st einfach jedes Byte, fertig.

    das ist dein problem !

    dem XOR selber ist es egal ...
    Aber deiner Darstellungs/Transport - Schicht vielleicht nicht.

    ein darstellbarer Text verxort muss nicht einen darstellbaren ergeben.
    Sondern erst wenn die "Byte-Wurst" wieder zurueckkonvertierst, solltest immer wieder den darstellbaren String erhalten.

    in cooky's Beispiel ist das Ausprinten wollen des erzeugten "xor hashes" aka "Byte-Wurst" ohne konvertierung zweifelhaft.

    Byte-Folgen kann man natuerlich auch ueber text transportieren / darestellen, dazu muss man sie wiederum nur "konvertieren". Jedes Byte als hex Octed in Text uebertragen ala 0xA1 0x2F ... 0x00 -> Base 16 codierung. Effektiver fuer solche dinger ist aber Base64 z.b.

    Base16 und Base64 garantieren dir eben(weils deren sinn ist), das das erzeugte ueber ASCII-text Funktionen uebertragen zu koennen.
    Anhaenge in mails werden oft noch base64 codiert uebertragen, weil das mail-Protokoll nur text kann ...

    Ciao ...


Anmelden zum Antworten