Hallo zusammen,
AutoIt ist mir seit einigen Jahren bekannt und seit ca. 2 Jahren arbeite ich damit hier und da mal
Aktuell hatte ich die "Herausforderung", in einem Skript "verschlüsselt" ein Kennwort abzulegen.
Nach langen Verständnis-Problemen, wie man überhaupt Strings ver-/entschlüssselt, habe ich mir nun was zusammengeschrieben.
Hierbei verwende ich im 1. Programm ein zusätzliches Kennwort, mit dem ich das eigentliche Kennwort verschlüssele und dieses dann die den Hash und verschlüsseltes Kennwort ausgibt.
Bei Start des 2. Programmes gebe ich das zusätzliche Kennwort an, mit dem geprüft wird, ob der im 2. Programm hinterlegte Hash aus der Ausgabe des 1. Programmes übereinstimmt.
Wenn ja wird der Hash genommen und zum entschlüsseln des Kennworts verwendet.
Die Frage ist, ob dies hablbwegs "state of the Art" ist, oder das besser lösbar wäre.
Ich hatte die funktion "_Crypt_DeriveKey" gesehen, jedoch nicht verstanden, wofür/wie man es verwendet.
Anbei ein Beispiel-Code, um via Kommandozeile das Kennwort zu verschlüsseln:
Create_Crypted_Password.exe SafePassword123 HeyDuDa456
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=Create_Crypted_Password.exe
; Ausgabe in Kommandozeile umleiten
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Crypt.au3>
; Kennwort, welches verschlüsselt werden soll
$Password_to_encrypt = $CmdLine[1]
; Passwort, mit dem das Kennwort verschlüsselt werden soll
$Password_for_encryption = $CmdLine[2]
_Crypt_Startup()
; Hier wird der Hash des Passwords erstellt, mit dem das eigentlich zu schützende Kennwort verschlüsselt wird
$Password_for_encryption_Hash = _Crypt_HashData($Password_for_encryption,$CALG_SHA_512)
; Hier wird das Kennwort verschlüsselt
$Password_to_encrypt_Encrypted = _Crypt_EncryptData($Password_to_encrypt, $Password_for_encryption_Hash, $CALG_AES_256)
_Crypt_Shutdown()
; Ausgabe
ConsoleWrite ("; Aus dem Kennwort, welches verschlüsselt werden soll (" & $Password_to_encrypt & ") wurde" & @LF)
ConsoleWrite ("; verschlüsselt, es lautet:" & @LF)
ConsoleWrite ("PASSWORD_TO_ENCRYPT_ENCRYPTED=" & $Password_to_encrypt_Encrypted & @LF)
ConsoleWrite ("; => Dieses wird im Program als Variable hinterlegt" & @LF)
ConsoleWrite (@LF)
ConsoleWrite ("; Aus dem Passwort, mit dem das Kennwort verschlüsselt werden soll" & @LF)
ConsoleWrite ("; (" & $Password_for_encryption & ") wurde ein Hash erstellt, er lautet:" & @LF)
ConsoleWrite ("PASSWORD_FOR_ENCRYPTION_HASH=" & $Password_for_encryption_Hash & @LF)
ConsoleWrite ("; => Dieses wird im Program als Variable hinterlegt" & @LF)
; Beendet das AutoIt-Program mit dem Fehlercode 0
Exit(0)
Alles anzeigen
Und nachfolgend der Code, indem das Kennwort entschlüsselt wird:
Decrypt_Password.exe HeyDuDa456
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=Decrypt_Password.exe
; Ausgabe in Kommandozeile umleiten
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Crypt.au3>
; Hash von Passwort, welches zur Prüfung auf Korrektheit des Kennworts aus dem Parameter dient
; Im Klartext: HeyDuDa456
$PASSWORD_FOR_ENCRYPTION_HASH = '0x5D29EBBA0A7BE6C154D3D1D2FD96FC5F2A74F31536C1A44FD4D19EAF1A5D7047CAA0294E2A7FDD41AC8EAC4AFD92CF88EE09D09AB19ED57586EB59F094CF1607'
; Verschlüssltes Kennwort
; Im Klartext: SafePassword123
$PASSWORD_TO_ENCRYPT_ENCRYPTED = '0x3AEBD835C9D5FA5A88743E94D982032A'
; Hash von angegebenen Parameter bei Start der Anwendung erstellen
$PASSWORD_FOR_ENCRYPTION_HASH_FROM_PARAMETER = _Crypt_HashData($CmdLine[1],$CALG_SHA_512)
; Hashes vergleichen und prüfen, ob das beim Start angegebene Kennwort mit dem bei Erstellung der Datei übereinstimmt
If $PASSWORD_FOR_ENCRYPTION_HASH_FROM_PARAMETER = $PASSWORD_FOR_ENCRYPTION_HASH Then
; das als Parameter angegebene Kennwort stimmt mit dem Kennwort-Hash im Skript überein
ConsoleWrite ("Hashes stimmen überein" & @LF)
Else
; Nein, das Kennwort was als Parameter angegeben wurde, stimmt nicht mit dem Kennwort, was beim Erstellen des Verschlüsselten Kennworts definiert wurde
ConsoleWrite ("Hashes stimmen NICHT überein" & @LF)
Exit(1603)
EndIf
; Vorheriges Starten der Crypt-Bibliothek für mehr Performance.
_Crypt_Startup()
; Entschlüsselt mithilfe des a
$PASSWORD_DECRYPTED = _Crypt_DecryptData($PASSWORD_TO_ENCRYPT_ENCRYPTED, $PASSWORD_FOR_ENCRYPTION_HASH, $CALG_AES_256)
; Beenden der Crypt-Bibliothek
_Crypt_Shutdown()
; WICHTIG: das entschlüsselte Kennwort muss von einen Binär-Code in einen Lesbaren String umgewandelt werden
$PASSWORD_DECRYPTED = BinaryToString($PASSWORD_DECRYPTED)
; Passwort im Klartext ausgeben
ConsoleWrite("Das Passwort im Klartext lautet: " & $PASSWORD_DECRYPTED & @LF)
; Beendet das AutoIt-Program mit dem Fehlercode 0
Exit(0)
Alles anzeigen
Für Anregungen wäre ich sehr dankbar
Danke vielmals für ein Feedback und Grüße
Tralveller
P.S.: Das Tool "CodeCrypter" hatte ich mir bereits angeschaut, jedoch funktioniert es an diversen stellen nicht, sodass ich dies nicht verwenden würde.