Datei laden und speichern (verschlüsseln)

  • Hallo,
    ich möchte gerne bei meiner Speicher-Funktion eine Verschlüssel-Funktion nutzen.

    Also so das die eigentliche Textdatei verschlüsselt gespeichert wird, natürlich
    muss die Textdatei dann beim einladen (Programmstart) wieder entschlüsselt werden.
    Ich würde es gerne so machen, das man einen Schlüssel für die Verschlüsselung angeben kann.

    Ablauf:
    >Programmstart - Textdatei wird geladen - Textdatei entschlüsseln
    >>>Datenausgabe der Textdatei
    >>>evtl werden neue Daten eingegeben
    >Programm wird beendet - Textdatei verschlüsseln - Textdatei wird gespeichert

    Ich hoffe das ist so möglich und mir kann da einer helfen?!
    Danke.

  • Schau dir dazu die Crypt-UDF ;)

    Diese Funktionen werden für dich relevant sein:

    [autoit]

    #include <Crypt.au3>
    _Crypt_Startup
    _Crypt_DeriveKey

    [/autoit][autoit][/autoit][autoit]

    _Crypt_DecryptFile
    ; bzw
    _Crypt_EncryptFile

    [/autoit][autoit][/autoit][autoit]

    ; Ressourcen freigeben:
    _Crypt_DestroyKey
    _Crypt_Shutdown

    [/autoit]

    //Edit: Anscheinend bugt Geshi rum :huh: . Man sollte mal die Links fixen.

    Hier nochmal zur Hilfe verlinkt:
    _Crypt_Startup
    _Crypt_DeriveKey
    _Crypt_DecryptFile
    _Crypt_EncryptFile
    _Crypt_DestroyKey
    _Crypt_Shutdown

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

    • Offizieller Beitrag

    Eine einfache XOR-Verschlüsselung reicht in den meisten Fällen auch aus. Hier mal meine Variante mit Speicher- und Ladefunktion:

    Spoiler anzeigen
    [autoit]


    $sText = FileRead(@ScriptDir & '\!cryptfile.txt') ; Beispieltext zum verschlüsseln

    [/autoit] [autoit][/autoit] [autoit]

    $sPass = 'kEqW1bJkhpJ73x01k3039uN1jh7pzKpHMZsXeqp6bGWGLZWeuV2ZJh6883OJ3hI7' ; Passwort zum verschlüsseln
    $sFilename = @ScriptDir & '\!cryptfile.cr' ; Pfad + Dateiname für die verschlüsselte Datei

    [/autoit] [autoit][/autoit] [autoit]

    _FileCryptSave($sText, $sPass, $sFilename) ; Text verschlüsseln und abspeichern

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sPass = 'abcdefgh' ; Passwort zum entschlüsseln (hier extra falsch eingegeben, um zu zeigen, dass dann der Text nicht richtig entschlüsselt wird)
    $sFilename = @ScriptDir & '\!cryptfile.cr' ; Pfad + Dateiname für die zu entschlüsselnde Datei

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Falsches Passwort:', _FileCryptRead($sPass, $sFilename)) ; Datei laden, entschlüsseln und anzeigen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sPass = 'kEqW1bJkhpJ73x01k3039uN1jh7pzKpHMZsXeqp6bGWGLZWeuV2ZJh6883OJ3hI7' ; Passwort zum entschlüsseln (jetzt mit richtigem Passwort)
    $sFilename = @ScriptDir & '\!cryptfile.cr' ; Pfad + Dateiname für die zu entschlüsselnde Datei

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Richtiges Passwort:', _FileCryptRead($sPass, $sFilename)) ; Datei laden, entschlüsseln und anzeigen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileCryptSave($sText, $sPass, $sFile)
    Local $hFile = FileOpen($sFile, 2 + 8)
    If $hFile = -1 Then Return SetError(1, 0, 0)
    FileWrite($hFile, StringToBinary(_StringEncryptXOR($sText, $sPass)))
    FileClose($hFile)
    EndFunc ;==>_FileCryptSave

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileCryptRead($sPass, $sFile)
    Local $hFile = FileOpen($sFile, 0), $sOut
    If $hFile = -1 Then Return SetError(1, 0, 0)
    $sOut = _StringEncryptXOR(FileRead($hFile), $sPass)
    FileClose($hFile)
    Return $sOut
    EndFunc ;==>_FileCryptRead

    [/autoit] [autoit][/autoit] [autoit]

    Func _StringEncryptXOR($sText, $sPass)
    If $sPass = '' Or $sText = '' Then Return SetError(1, 0, 0)
    Local $iTextChar, $iPos, $iPassChar, $iLen = StringLen($sPass)
    For $i = 1 To StringLen($sText)
    $iTextChar = Asc(StringMid($sText, $i, 1))
    $iPos = Mod($i - 1, $iLen) + 1
    $iPassChar = Asc(StringMid($sPass, $iPos, 1))
    $sText = StringReplace($sText, $i, Chr(BitXOR($iTextChar, $iPassChar)), 1)
    Next
    Return $sText
    EndFunc ;==>_StringEncryptXOR

    [/autoit]
  • @all:
    Danke für die Hilfe. Ich werde mir die Beispiele mal angucken.

    @Osacar:
    Danke das sieht sehr gut aus, so wie ich es mir gewünscht habe!
    Nun muss ich nur mal versuchen das ganze in mein Script zu bauen....
    Die Textdatei soll ja verschlüsselt weitergegeben werden und beim laden entschlüsselt werden :)