Mit dieser UDF kann man Strings in Bildform umwandeln und selbstverständlich auch wieder zurück ;). Ein Schlüssel kann zufällig erstellt, in einer Datei abgespeichert oder aus einer Datei eingelesen werden.
Alle Funktion sind beschrieben und ein Beispiel ist auch mit dabei.
Und wieder wird die GDIP.au3 benötigt...
Die GDIP.au3, die UDF und ein Beispiel befinden sich im Anhang.
UDF:
Spoiler anzeigen
; #FUNCTION# ====================================================================================================================
; Name ..........: _ImageCrypt_GenerateImage
; Beschreibung ..: Erstellt eine Bitmap aus den angegebenen Daten und dem angegebenen Schlüssel. Benötigt: '#include <GDIP.au3>'
; Syntax ........: _ImageCrypt_GenerateImage($sData, $aColorKey, $iCryptImageSize, [$sFilePath = ""])
; Parameter .....: $sData - Die Daten die in die Bitmap geschrieben werden
; $aColorKey - Array das den Schlüssel enthält
; $iCryptImageSize - Höhe/Breite der Bitmap
; $sFilePath - [Optional] Speicherort der Bitmap (Wird ein leerer String "" angegeben, gibt die Funktion ein Bitmap Handle zurück
; Rückgabewerte .: Success - Gibt ein Bitmap Handle bzw. den Rückgabewert von _GDIPlus_ImageSaveToFile zurück
; Failure - -1 und setzt @error
; |@error = 1 - $sData ist ein leerer String
; |@error = 2 - $aColorKey ist kein Array
; |@error = 3 - Der Datenstrang ist zu groß für die Bitmap
; Bemerkungen ...: Benötigt _GDIPlus_Startup. Das Bild darf nicht verkleinert/vergrößert oder komprimiert werden, da es sonst nicht mehr korrekt entschlüsselt werden kann
; ===============================================================================================================================
Func _ImageCrypt_GenerateImage($sData, $aColorKey, $iCryptImageSize, $sFilePath = "")
If $sData = "" Then Return SetError(1, 0, -1)
If Not IsArray($aColorKey) Then Return SetError(2, 0, -1)
Local $aDataSplit = StringSplit($sData, "")
If $aDataSplit[0] > $iCryptImageSize ^ 2 Then Return SetError(3, 0, -1)
Local $hCryptGraphicsTmp = _GDIPlus_GraphicsCreateFromHWND(WinGetHandle(AutoItWinGetTitle()))
Local $hCryptBitmapTmp = _GDIPlus_BitmapCreateFromGraphics($iCryptImageSize, $iCryptImageSize, $hCryptGraphicsTmp)
Local $hBitmapGraphicsContextTmp = _GDIPlus_ImageGetGraphicsContext($hCryptBitmapTmp)
_GDIPlus_GraphicsClear($hBitmapGraphicsContextTmp, 0xFFFFFFFF)
[/autoit] [autoit][/autoit] [autoit]Local $iJ = 0
For $iY = 0 To $iCryptImageSize - 1
For $iX = 0 To $iCryptImageSize - 1
$iJ += 1
For $iI = 1 To $aColorKey[0][0]
If $iJ > $aDataSplit[0] Then ExitLoop 3
If $aDataSplit[$iJ] == $aColorKey[$iI][0] Then
_GDIPlus_BitmapSetPixel($hCryptBitmapTmp, $iX, $iY, "0xFF" & $aColorKey[$iI][1])
ExitLoop
EndIf
Next
Next
Next
_GDIPlus_GraphicsDispose($hCryptGraphicsTmp)
_GDIPlus_GraphicsDispose($hBitmapGraphicsContextTmp)
If $sFilePath <> "" Then
Local $iReturn = _GDIPlus_ImageSaveToFile($hCryptBitmapTmp, $sFilePath)
_GDIPlus_BitmapDispose($hCryptBitmapTmp)
Return $iReturn
EndIf
Return $hCryptBitmapTmp
EndFunc ;==>_ImageCrypt_GenerateImage
; #FUNCTION# ====================================================================================================================
; Name ..........: _ImageCrypt_DecryptImage
; Beschreibung ..: Entschlüsselt ein Bild mit dem angegebenen Schlüssel. Benötigt: '#include <GDIP.au3>'
; Syntax ........: _ImageCrypt_DecryptImage($sImagePath, $aColorKey, [$iCryptImageSize = 0])
; Parameter .....: $sImagePath - Die Daten die in die Bitmap geschrieben werden
; $aColorKey - Array das den Schlüssel enthält
; $iCryptImageSize - [Optional] Höhe/Breite der Bitmap. Falls 0, so wird die Größe mit _GDIPlus_ImageGetWidth ausgelesen
; Rückgabewerte .: Success - Gibt den entschlüsselten Datenstrang zurück
; Failure - -1 und setzt @error
; |@error = 1 - $sImagePath ist ein leerer String
; |@error = 2 - $aColorKey ist kein Array
; Bemerkungen ...: Benötigt _GDIPlus_Startup.
; ===============================================================================================================================
Func _ImageCrypt_DecryptImage($sImagePath, $aColorKey, $iCryptImageSize = 0)
If $sImagePath = "" Then Return SetError(1, 0, -1)
If Not IsArray($aColorKey) Then Return SetError(2, 0, -1)
Local $hCryptBitmapTmp = _GDIPlus_BitmapCreateFromFile($sImagePath)
If $iCryptImageSize <= 0 Then $iCryptImageSize = _GDIPlus_ImageGetWidth($hCryptBitmapTmp)
Local $sReturnData = ""
For $iY = 0 To $iCryptImageSize - 1
For $iX = 0 To $iCryptImageSize - 1
$iPixelColorTmp = StringTrimLeft(Hex(_GDIPlus_BitmapGetPixel($hCryptBitmapTmp, $iX, $iY)), 2)
If $iPixelColorTmp = "FFFFFF" Then ExitLoop 2
For $i = 1 To $aColorKey[0][0]
If $iPixelColorTmp == $aColorKey[$i][1] Then
$sReturnData &= $aColorKey[$i][0]
ExitLoop
EndIf
Next
Next
Next
_GDIPlus_BitmapDispose($hCryptBitmapTmp)
[/autoit] [autoit][/autoit] [autoit]Return $sReturnData
EndFunc ;==>_ImageCrypt_DecryptImage
; #FUNCTION# ====================================================================================================================
; Name ..........: _ImageCrypt_CreateRandomKey
; Beschreibung ..: Erstellt einen zufälligen Schlüssel für die spätere Verwendung
; Syntax ........: _ImageCrypt_CreateRandomKey()
; Parameter .....: Keine
; Rückgabewerte .: Success - Gibt den erstellten Schlüssel zurück
; Failure - ""
; Bemerkungen ...: Keine
; ===============================================================================================================================
Func _ImageCrypt_CreateRandomKey()
Local $aRandomKey[102][2]
$aRandomKey[0][0] = 101
For $i = 1 To 26
$aRandomKey[$i][0] = Chr($i + 64)
Next
For $i = 27 To 52
$aRandomKey[$i][0] = Chr($i + 70)
Next
For $i = 53 To 62
$aRandomKey[$i][0] = Chr($i - 5)
Next
$aRandomKey[63][0] = " "
$aRandomKey[64][0] = "?"
$aRandomKey[65][0] = "!"
$aRandomKey[66][0] = "."
$aRandomKey[67][0] = ","
$aRandomKey[68][0] = ";"
$aRandomKey[69][0] = ":"
$aRandomKey[70][0] = "("
$aRandomKey[71][0] = ")"
$aRandomKey[72][0] = '"'
$aRandomKey[73][0] = "'"
$aRandomKey[74][0] = "%"
$aRandomKey[75][0] = "&"
$aRandomKey[76][0] = "$"
$aRandomKey[77][0] = "ß"
$aRandomKey[78][0] = "="
$aRandomKey[79][0] = "+"
$aRandomKey[80][0] = "-"
$aRandomKey[81][0] = "_"
$aRandomKey[82][0] = "*"
$aRandomKey[83][0] = "/"
$aRandomKey[84][0] = "\"
$aRandomKey[85][0] = "@"
$aRandomKey[86][0] = "#"
$aRandomKey[87][0] = "~"
$aRandomKey[88][0] = "{"
$aRandomKey[89][0] = "}"
$aRandomKey[90][0] = "§"
$aRandomKey[91][0] = "^"
$aRandomKey[92][0] = "°"
$aRandomKey[93][0] = "<"
$aRandomKey[94][0] = ">"
$aRandomKey[95][0] = "|"
$aRandomKey[96][0] = "ä"
$aRandomKey[97][0] = "ö"
$aRandomKey[98][0] = "ü"
$aRandomKey[99][0] = "Ä"
$aRandomKey[100][0] = "Ö"
$aRandomKey[101][0] = "Ü"
For $i = 1 To 101
Do
$bUnique = True
$aRandomKey[$i][1] = Hex(Random(0, 255, 1), 2) & Hex(Random(0, 255, 1), 2) & Hex(Random(0, 255, 1), 2)
For $j = 1 To 101
If $j <> $i And $aRandomKey[$j][1] = $aRandomKey[$i][1] Or $aRandomKey[$i][1] = "FFFFFF" Then $bUnique = False
Next
Until $bUnique
Next
Return $aRandomKey
EndFunc ;==>_ImageCrypt_CreateRandomKey
; #FUNCTION# ====================================================================================================================
; Name ..........: _ImageCrypt_SaveKeyToFile
; Beschreibung ..: Speichert einen Schlüssel in einer Datei
; Syntax ........: _ImageCrypt_SaveKeyToFile($aColorKey, $sFilePath)
; Parameter .....: $aColorKey - Der Schlüssel der gespeichert werden soll
; $sFilePath - Pfad zur Zieldatei
; Rückgabewerte .: Success - 1
; Failure - -1 und setzt @error
; |@error = 1 - $sFilePath ist ein leerer String
; |@error = 2 - $aColorKey ist kein Array
; Bemerkungen ...: Falls die Datei bereits existiert wird ihr Inhalt überschrieben
; ===============================================================================================================================
Func _ImageCrypt_SaveKeyToFile($aColorKey, $sFilePath)
If Not IsArray($aColorKey) Then Return SetError(2, 0, -1)
If $sFilePath = "" Then Return SetError(1, 0, -1)
$hCryptKeyFile = FileOpen($sFilePath, 2)
If $hCryptKeyFile = -1 Then Return SetError(3, 0, -1)
$sKeyTmp = ""
For $iI = 1 To $aColorKey[0][0]
$sKeyTmp &= $aColorKey[$iI][0] & "=" & $aColorKey[$iI][1] & ";"
Next
FileWrite($hCryptKeyFile, StringTrimRight($sKeyTmp, 1))
FileClose($hCryptKeyFile)
$sKeyTmp = ""
Return 1
EndFunc
; #FUNCTION# ====================================================================================================================
; Name ..........: _ImageCrypt_LoadKeyFromFile
; Beschreibung ..: Lädt einen Schlüssel aus einer Datei
; Syntax ........: _ImageCrypt_LoadKeyFromFile($sFilePath)
; Parameter .....: $sFilePath - Pfad zur Datei
; Rückgabewerte .: Success - Gibt den Schlüssel aus der Datei zurück
; Failure - -1 und setzt @error
; |@error = 1 - $sFilePath ist ein leerer String
; Bemerkungen ...: Keine
; ===============================================================================================================================
Func _ImageCrypt_LoadKeyFromFile($sFilePath)
If $sFilePath = "" Then Return SetError(1, 0, -1)
$aKeySplitTmp = StringSplit(FileRead($sFilePath), ";")
Local $aColorKey[$aKeySplitTmp[0] + 1][2]
$aColorKey[0][0] = $aKeySplitTmp[0]
For $i = 1 To $aColorKey[0][0]
$aSplitTmp = StringSplit($aKeySplitTmp[$i], "=", 2)
$aColorKey[$i][0] = $aSplitTmp[0]
$aColorKey[$i][1] = $aSplitTmp[1]
Next
Return $aColorKey
EndFunc
Ich hoffe es hilft irgendjemandem bei... was auch immer...
Und so sieht das nachher aus: