#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <String.au3>
$gui = GUICreate("Textdatei verschlüssler", 343, 190, -1, -1)
$select = GUICtrlCreateButton("Datei aussuchen", 32, 16, 113, 65, $WS_GROUP)
$encrypt = GUICtrlCreateButton("Datei verschlüsseln", 184, 16, 113, 65, $WS_GROUP)
$decrypt = GUICtrlCreateButton("Datei entschlüsseln", 104, 96, 113, 73, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $key = IniRead(@ScriptDir & "\key.ini", "Setting", "Key", "")

If Not FileExists(@ScriptDir & "\key.ini") Then
	Global $Random = _CreateRandomPW()
Else
	Global $Random = $key
EndIf
IniWrite(@ScriptDir & "\key.ini", "Setting", "Key", $Random)

Global $file, $rndPW[8], $Random


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $select
			$file = FileOpenDialog("Datei aussuchen...", @ScriptDir, "Text Dateien(*.txt;*.ini;*.html)")
		Case $encrypt
			_FileLock($file)
			If @error = 1 Then
				MsgBox(0, "Fehler", "Die Datei konnte nicht gefunden werden.")
			EndIf
		Case $decrypt
			_FileUnlock($file)
			If @error = 2 Then
				MsgBox(0, "Fehler", "Die Datei konnte nicht gefunden werden.")
			EndIf
	EndSwitch
WEnd

Func _FileLock($Data)
	If FileExists($Data) Then
		$fLines = _FileCountLines($Data) + 1
		Dim $fData[$fLines]
		Dim $encStr[$fLines]
		For $i = 1 To $fLines - 1
			$fData[$i] = FileReadLine($Data, $i)
			$encStr[$i] = _StringEncrypt(1, $fData[$i], $Random, 3)
		Next
		FileDelete($Data)
		For $i = 1 To $fLines - 1
			FileWriteLine($Data, $encStr[$i])
		Next
	Else
		SetError(1)
	EndIf
EndFunc   ;==>_FileLock

Func _FileUnlock($Data)
	If FileExists($Data) Then
		$fLines = _FileCountLines($Data) + 1
		Dim $fData[$fLines]
		Dim $encStr[$fLines]
		For $i = 1 To $fLines - 1
			$fData[$i] = FileReadLine($Data, $i)
			$encStr[$i] = _StringEncrypt(0, $fData[$i], $Random, 3)
		Next
		FileDelete($Data)
		For $i = 1 To $fLines - 1
			FileWriteLine($Data, $encStr[$i])
		Next
		$Random = _CreateRandomPW();Jedesmal wenn eine Datei entschlüsselt wird, wird ein neues Passwort hergestellt.
		IniWrite(@ScriptDir & "\key.ini", "Setting", "Key", $Random)
	Else
		SetError(2)
	EndIf
EndFunc   ;==>_FileUnlock

Func _CreateRandomPW()
	Local $rndPW[8] = ["g4aBnJ", "a2gGo99", "l54RT", "sQrNtr", "nmµR", "556930312", "g7ruT", "NissanSkylinexD"]
	Local $rnd = Random(0, 7, 1)
	Return $rndPW[$rnd]
EndFunc   ;==>_CreateRandomPW
