- Offizieller Beitrag
Ich brauchte gerade eine Verschlüsselungsroutine für Texte, wollte aber _StringEncrypt nicht benutzen und so habe ich diese Funktionen geschrieben:
Den Beispieltext "!cryptfile.txt" findet ihr als Anhang.
Spoiler anzeigen
$sText = FileRead(@ScriptDir & '\!cryptfile.txt') ; Beispieltext zum verschlüsseln
$sPass = 'ßYm3Ü5Q$Y4AfDIM0tch0V2"8zg7i&U#Xn26=' ; Passwort zum verschlüsseln
$sFilename = @ScriptDir & '\!cryptfile.cr' ; Pfad + Dateiname für die verschlüsselte Datei
_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
MsgBox(0, 'Falsches Passwort:', _FileCryptRead($sPass, $sFilename)) ; Datei laden, entschlüsseln und anzeigen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$sPass = 'ßYm3Ü5Q$Y4AfDIM0tch0V2"8zg7i&U#Xn26=' ; Passwort zum entschlüsseln (jetzt mit richtigem Passwort)
$sFilename = @ScriptDir & '\!cryptfile.cr' ; Pfad + Dateiname für die zu entschlüsselnde Datei
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 +
If $hFile <> -1 Then
FileWrite($hFile, StringToBinary(_StringEncryptXOR($sText, $sPass, -2)))
FileClose($hFile)
Else
SetError(1)
EndIf
EndFunc ;==>_FileCryptSave
Func _FileCryptRead($sPass, $sFile)
Local $hFile = FileOpen($sFile, 0)
If $hFile <> -1 Then
Local $out = _StringEncryptXOR(FileRead($hFile), $sPass, 2)
FileClose($hFile)
Return $out
Else
SetError(1)
EndIf
EndFunc ;==>_FileCryptRead
Func _StringEncryptXOR($sText, $sPass, $crypt)
Local $sOut, $c, $p, $iLen = StringLen($sPass)
For $i = 1 To StringLen($sText) ; Zeichen für Zeichen des Textes durchgehen
$p = Mod($i, $iLen) ; Position im Passwort (Null bis Passwortlänge minus 1)
$c = Asc(StringMid($sPass, $p, 1)) ; das Zeichen, was an Position $p im Passwort steht
$sOut &= Chr(BitXOR(Asc(StringMid($sText, $i, 1)), $c, BitRotate($p, 4, 'B'))) ; das momentane Zeichen im Text mit $c1 und $p XOR'en
Next
Return $sOut
EndFunc ;==>_StringEncryptXOR
_FileCryptSave() speichert einen Text verschlüsselt ab. Text, Passwort und Dateiname müssen der Funktion übergeben werden (siehe Beispiel).
_FileCryptRead() liest einen Text aus einer Datei und gibt den entschlüsselten Text zurück. Passwort und Dateiname müssen der Funktion übergeben werden (siehe Beispiel).
_StringEncryptXOR() ist die eigentliche Ver-/Entschlüsselungsroutine. Text und Passwort müssen der Funktion übergeben werden.
Vielleicht kann die Funktionen ja noch jemand gebrauchen...