Hallo Community!
Ich hatte vor längerer Zeit eine wichtige Datei verschlüsselt. Diese Datei enthielt sämtliche Benutzernamen + Passwörter von diversen Seiten wo ich mich irgendwann einmal registriert habe. Leider ist das Skript dazu bei einem kleinen PC „Problem“ abhandengekommen. Daher hatte ich den ganzen Tag überlegt wie nun dieser Algorithmus war, womit ich diese Datei damals verschlüsselt habe. Nach langem Testen und probieren habe ich es dann doch tatsächlich hinbekommen den Algorithmus nochmal neu zu programmieren. Als meine Datei dann endlich wieder entschlüsselt war, habe ich angefangen einen Echtzeit Verschlüsselung Tool zu schreiben, welches meinen Algorithmus verwendet. Diesen wollte ich hier gerne einmal hochladen.
Das erste Edit Control ist für die Eingabe des zu ver- bzw. entschlüsselnden Textes verantwortlich. Es erkennt automatisch ob es sich um zu entschlüsselnde Binärdaten oder zu verschlüsselnde Texte handelt.
Das Input Control nimmt das Passwort entgegen. Wird kein Passwort eingetragen, so wird der String einfach nur in Binärdaten umgewandelt und kann mit BinaryToString() wieder in den Originaltext verwandelt werden.
Das zweite Edit Control gibt die verschlüsselten Binärdaten oder der entschlüsselte Text aus.
Vorteil des Algorithmus:
Man kann den Text nicht durch die Häufigkeit der Buchstaben erschließen. Die einzig sinnvolle Methode um den Text zu entschlüsseln ist nach meiner Überlegung nur mit Bruteforce möglich.
Nachteil des Algorithmus:
Sind bestimmte Zeichen des Passwortes an ihren „richtigen“ Platz, so werden Teilstrings des Originaltextes entschlüsselt. So kann bei einem nicht vollständigen Passwortes trotzdem der Text noch erschließt werden.
Vielleicht kann ja der eine oder andere das Tool bzw. den Algorithmus gebrauchen. Hier das Skript:
Spoiler anzeigen
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Global $hGUI, $idInput, $idPassword, $idOutput, $idDummy, $avAccelertors[1][2], $sReadText, $sReadPassword, $sSaveText, $sSavePassword, $sSet
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Make-Grafik's Encryption Tool", 800, 600)
$idInput = GUICtrlCreateEdit('', 0, 0, 800, 290, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN + $WS_VSCROLL)
$idPassword = GUICtrlCreateInput('', 0, 290, 800, 20)
$idOutput = GUICtrlCreateEdit('', 0, 310, 800, 290, $ES_AUTOVSCROLL + $ES_READONLY + $WS_VSCROLL)
$idDummy = GUICtrlCreateDummy()
$avAccelertors[0][0] = '^a'
$avAccelertors[0][1] = $idDummy
GUISetAccelerators($avAccelertors)
GUICtrlSetOnEvent($idDummy, '_SelAll')
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI_EVENT_CLOSE')
GUISetState()
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While Sleep(10)
$sReadText = GUICtrlRead($idInput)
$sReadPassword = GUICtrlRead($idPassword)
If $sReadText <> $sSaveText Or $sReadPassword <> $sSavePassword Then
$sSet = _MG_Encryption($sReadText, $sReadPassword, _IsBinaryString($sReadText))
If _IsBinaryString($sReadText) Then $sSet = BinaryToString($sSet)
GUICtrlSetData($idOutput, $sSet)
EndIf
$sSaveText = $sReadText
$sSavePassword = $sReadPassword
WEnd
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _SelAll()
Local $hFocus = ControlGetHandle($hGUI, '', ControlGetFocus($hGUI))
Local $hInput = ControlGetHandle($hGUI, '', $idInput)
Local $hPassword = ControlGetHandle($hGUI, '', $idPassword)
Local $hOutput = ControlGetHandle($hGUI, '', $idOutput)
If $hFocus = $hInput Or $hFocus = $hPassword Or $hFocus = $hOutput Then _GUICtrlEdit_SetSel($hFocus, 0, -1)
EndFunc
Func GUI_EVENT_CLOSE()
Exit
EndFunc
Func _MG_Encryption($vData, $sPassword, $bMode)
If _IsBinaryString($vData) Then $vData = BinaryToString($vData)
If Not $vData Then $vData = Chr(0)
If Not $sPassword Then $sPassword = Chr(0)
Local $sTemp = $sPassword
Local $iLen = StringLen($vData)
Local $i, $iX, $iY
While $iLen > StringLen($sPassword)
$sPassword &= $sTemp
WEnd
$sPassword = StringLeft($sPassword, $iLen)
$sTemp = ''
For $i = 1 To $iLen
$iX = Asc(StringLeft($vData, 1))
$iY = Asc(StringLeft($sPassword, 1))
If $bMode Then
If $iX < $iY Then $iX += 255
$iX -= $iY
Else
$iX += $iY
If $iX > 255 Then $iX -= 255
EndIf
$sTemp &= Chr($iX)
$vData = StringTrimLeft($vData, 1)
$sPassword = StringTrimLeft($sPassword, 1)
Next
Return StringToBinary($sTemp)
EndFunc
Func _IsBinaryString($sString)
Local $sLeft = StringLeft($sString, 2)
Local $sRight = StringTrimLeft($sString, 2)
If $sLeft <> '0x' Or Not $sRight Then Return False
[/autoit] [autoit][/autoit] [autoit]StringRegExpReplace($sRight, '[^0-9a-fA-F]', '')
Return Not @extended
EndFunc