AES als Datei Container: Automatische Schlüsselgenerierung und Formatierung Fehler
Verfasst: 31.07.2024 12:27
Hallo @All
Hallo DarkDragon,
Hallo jacdelad,
Hallo H.Brill,
Grundlage zur genannten Fragestellung war:
https://www.purebasic.fr/german/viewtopic.php?t=33233
Resp. Weitergehend wurde Empfohlen mit AES weiter zu machen.
Ab Posting und Folgende.
https://www.purebasic.fr/german/viewtop ... 21#p366321
Konkreter Problematik bei Verwendung des AES:
https://www.purebasic.fr/german/viewtop ... 23#p366323
In den vorhandenen Beispielen aus PureBasic resp. der Hilfe entnommen.
Resp. im Forum oder über PureArea.
Zugrunde liegender Teil für die Generierung eines AES Schlüssel (Key)
war die Idee dass man den Schlüssel unter Zuhilfenahme der HWID (GUID)
erstellen könnte.
Der daraus erstellte HEX Wert liegt in der Form vor:
18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
Das Besispiel Projekt aus PureBasic sieht jedoch eine Formatierung vor
des vorhandenen HEX Wertes in etwa:
$06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
Entnehme ich den HEX Wert direkt:
18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
als Daten ergibt mir dies eine Fehlermeldung
Verwende ich jedoch die Variable "*Key"
Ergibt sich wieder eine Fehlermeldung.
Konkrets Beispiel als Teil Code:
Nicht Funktionsfähig hingegen:
Resp. gleiches Problem:
Oder:
Ich bin mir nicht sicher ob ich bei der DataSection evtl. auch eine Variable übergeben kann anstelle eines
Hart Hinterlegten Wertes.
Wenn ich also eine Variable hinterlegen kann, müsste ich den erhaltenen HEX Wert jedoch zuerst so Formatieren dass er
der Konvention entspricht welche von der DataSection verlangt wird.
Was zu meiner nächsten Problematik führte welche sich eröffnete, WIE kann ich diesen entsprechend Formatieren.
Liebe Grüsse
Christian
Erstellen GUID:
GUID als Basis für HEX Schlüssel Generieren:
AES Beispiel Code etwas Angepasst:
Hallo DarkDragon,
Hallo jacdelad,
Hallo H.Brill,
Grundlage zur genannten Fragestellung war:
https://www.purebasic.fr/german/viewtopic.php?t=33233
Resp. Weitergehend wurde Empfohlen mit AES weiter zu machen.
Ab Posting und Folgende.
https://www.purebasic.fr/german/viewtop ... 21#p366321
Konkreter Problematik bei Verwendung des AES:
https://www.purebasic.fr/german/viewtop ... 23#p366323
In den vorhandenen Beispielen aus PureBasic resp. der Hilfe entnommen.
Resp. im Forum oder über PureArea.
Zugrunde liegender Teil für die Generierung eines AES Schlüssel (Key)
war die Idee dass man den Schlüssel unter Zuhilfenahme der HWID (GUID)
erstellen könnte.
Der daraus erstellte HEX Wert liegt in der Form vor:
18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
Das Besispiel Projekt aus PureBasic sieht jedoch eine Formatierung vor
des vorhandenen HEX Wertes in etwa:
$06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
Entnehme ich den HEX Wert direkt:
18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
als Daten ergibt mir dies eine Fehlermeldung
Verwende ich jedoch die Variable "*Key"
Ergibt sich wieder eine Fehlermeldung.
Konkrets Beispiel als Teil Code:
Code: Alles auswählen
DataSection
Key:
Data.a $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection
Code: Alles auswählen
DataSection
Key:
Data.a 18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
EndDataSection
Code: Alles auswählen
DataSection
Key:
Data.a = *Key
EndDataSection
Code: Alles auswählen
DataSection
Key:
Data.a *Key
EndDataSection
Hart Hinterlegten Wertes.
Wenn ich also eine Variable hinterlegen kann, müsste ich den erhaltenen HEX Wert jedoch zuerst so Formatieren dass er
der Konvention entspricht welche von der DataSection verlangt wird.
Was zu meiner nächsten Problematik führte welche sich eröffnete, WIE kann ich diesen entsprechend Formatieren.
Liebe Grüsse
Christian
Erstellen GUID:
Code: Alles auswählen
EnableExplicit
Procedure.s MakeGUID()
Protected guid.GUID, lpsz.s{76}
If CoCreateGuid_(@guid) = #S_OK
ProcedureReturn PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 76), #PB_Unicode)
EndIf
EndProcedure
MessageRequester("","GUID: "+MakeGUID(),0)
Code: Alles auswählen
EnableExplicit
Procedure.s MakeGUID()
Protected guid.GUID, lpsz.s{76}
If CoCreateGuid_(@guid) = #S_OK
ProcedureReturn PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 76), #PB_Unicode)
EndIf
EndProcedure
MessageRequester("","GUID: "+MakeGUID(),0)
Code: Alles auswählen
Structure HW_PROFILE_INFO
DockInfo.l
szHWProfileGUID.s{38}
EndStructure
GetCurrentHwProfile_(hwp.HW_PROFILE_INFO)
hwGUID.s = hwp\szHWProfileGUID
String$ = hwGUID
; Kodieren eines UTF-8 Strings
*Text = UTF8(String$)
Encoded$ = Base64Encoder(*Text, StringByteLength(String$, #PB_UTF8))
UseSHA3Fingerprint()
*Key = AllocateMemory(32)
; Erstellt einen 256-Bit-Schlüssel mithilfe der SHA-512-Hash-Funktion und 500.000 Iterationen
DeriveCipherKey(hwGUID, Encoded$, 500000, *Key, 256, #PB_Cipher_SHA3, 512)
String$ = "Hello this is a test for AES"
*CipheredString = AllocateMemory(StringByteLength(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(StringByteLength(String$) + SizeOf(Character)) ; mit seiner abschließenden Null
If AESEncoder(@String$, *CipheredString, MemorySize(*CipheredString), ?Key, 128, 0, #PB_Cipher_ECB)
Debug "Ciphered: " + PeekS(*CipheredString)
AESDecoder(*CipheredString, *DecipheredString, MemorySize(*DecipheredString), ?Key, 128, 0, #PB_Cipher_ECB)
Debug "Deciphered: " + PeekS(*DecipheredString)
EndIf
DataSection
Key:
Data.a *Key
; Data.a 18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2
; Data.a $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection