String binär in eine Datei schreiben



  • Hallo zusammen
    Das hier ist mein erster Beitrag hier, hatte eine eigentlich gehofft, dass es nicht direkt eine Frage ist, aber so hat es sich nun ergeben.

    Meine Frage ist, wie ich es hinbekomme, dass mein Programm einen string binär in eine Datei schreibt. Das mit dem schreiben über den iostream kriege ich schon hin, jedoch wird der string als Klartext gespeichert und das ist nicht das Ziel.

    Hoffe ihr könnt mir helfen, oder mir sagen wie ich zur Lösung komme( warte ist das nicht das gleiche?)
    Vielen Dank im voraus

    Lars

    Code:

    #include <string>
    #include <fstream>
    
    int main()
    {
        string pwd = "password";  // string zum speichern des Passworts
        ostream file_output("pwd.dat", ios::binary);   // ostream Objekt
        file_output << pwd;
        file_output.close();
        return 0;
    }
    

    Mein Programm ist deutlich komplexer (aber auch nicht soo komplex) , aber das sollte gut zeigen, was ich meine.

    Danke nochmal 🙂



  • Definiere "einen String binär schreiben".



  • Er will wahrscheinlich das Passwort verschlüsseln 😉



  • Ja genau, ich möchte eine Art Datenbank für Passwörter schreiben, aber es soll ja nicht jeder Einsicht in die Passwörter haben, deswegen sollen die nicht als Klartext geschrieben werden, was bei mir aber der Fall ist.



  • Dann könnte Crypto++ dein Problem lösen.



  • Crypto++ setzt Verständnis für Kryptographie voraus. Mein Vorschlag wäre GPG, gibt ein paar APIs dafür.



  • Passwörter werden nicht verschlüsselt sondern gehashed und das am besten noch mit Salt (https://de.wikipedia.org/wiki/Salt_%28Kryptologie%29). Zumindest wenn man die Passwörter später nicht wieder im Klartext braucht. Wenn man sie im Klartext braucht hilft Verschlüsseln aber auch nicht viel, wenn der Schlüssel im Programm gespeichert ist.



  • UnderPlayer schrieb:

    Ja genau, ich möchte eine Art Datenbank für Passwörter schreiben, aber es soll ja nicht jeder Einsicht in die Passwörter haben, deswegen sollen die nicht als Klartext geschrieben werden, was bei mir aber der Fall ist.

    sebi707 schrieb:

    Passwörter werden nicht verschlüsselt sondern gehashed und das am besten noch mit Salt (https://de.wikipedia.org/wiki/Salt_%28Kryptologie%29). Zumindest wenn man die Passwörter später nicht wieder im Klartext braucht. Wenn man sie im Klartext braucht hilft Verschlüsseln aber auch nicht viel, wenn der Schlüssel im Programm gespeichert ist.

    Wenn das Passwort gespeichert werden soll MUSST du sie verschlüsseln, da bringt ein Hash nix. Hash verwendet man um zu prüfen ob ein Passwort korrekt ist.
    Und doch, verschlüsseln bringt etwas:

    1. Man kann die Datei nicht einfach so öffnen -> Normale Leute kommen nicht so leicht an die Passwörter
    2. Man kann den User das Masterpasswort eingeben lassen

  • Mod

    DarkShadow44 schrieb:

    Wenn das Passwort gespeichert werden soll MUSST du sie verschlüsseln, da bringt ein Hash nix. Hash verwendet man um zu prüfen ob ein Passwort korrekt ist.

    Ich bin mir nach der Beschreibung des Threaderstellers nicht sicher, ob er Passwörter zur späteren Nutzung hinterlegen möchte (ein Passwortmanager) oder ob er Passwörter zum späteren Abgleich hinterlegen möchte (ein Authentifizierungssystem). Je nachdem hat entweder sebi707 oder du Recht.



  • Tut mir leid, wenn ich mich unverständlich ausgedrückt habe. Ich möchte, dass das Programm die Passwörter speichern kann, damit der Benutzer sich nicht alles merken muss, somit sind die Passwörter für eine spätere Benutzung.
    Danke für die vielen Antworten.

    Leider verstehe ich überhaupt nichts von hashen oder verschlüsseln. Muss ich das selbst machen oder gibt es da spezielle Bibliotheken?



  • Dein Problem ist, dass Du nicht weißt, was "binär" heisst. Du stellst Dir vor, binär ist alles, was Du nicht lesen kannst. Aber so ist es nicht.

    Binär ist eigentlich alles, was Du speicherst. Wenn Du einen String binär speicherst, dann wird er eben so wie er ist gespeichert. Zufälligerweise ist das einfach nur Klartext. So werden Strings eben "binär" gespeichert.

    Willst Du, dass die Daten nicht jeder lesen kann, dann stelle die Dateirechte so ein, dass das eben nicht erlaubt ist. Einen besseren Schutz gibt es nicht.

    Du kannst die Daten auch irgendwie verschlüssen. Aber dafür brauchst Du einen Schlüssel. Und der muss bekannt sein. Sonst kann man die Daten nicht wieder entschlüsseln. Und wenn er bekannt ist, dann kann man es auch gleich bleiben lassen.

    Eine Variante ist, die Passwörter in eine Datei verschlüsselt abzulegen und den Anwender bei Bedarf nach einem Schlüssel fragen. Dann muss er sich nicht mehr das Passwort merken, aber dafür den Schlüssel, was ja auch wieder ein Passwort ist. Damit hast Du also auch eigentlich nichts erreicht.


  • Mod

    tntnet schrieb:

    Eine Variante ist, die Passwörter in eine Datei verschlüsselt abzulegen und den Anwender bei Bedarf nach einem Schlüssel fragen. Dann muss er sich nicht mehr das Passwort merken, aber dafür den Schlüssel, was ja auch wieder ein Passwort ist. Damit hast Du also auch eigentlich nichts erreicht.

    Die Idee ist vermutlich, einen Schlüssel für viele Passwörter zu benutzen. Was durchaus sinnvoll ist. Die Lösung ist nach wie vor Verschlüsselung, die man aber nicht im Rahmen eines Forenbeitrags mal eben so erklären kann.


Log in to reply