AESEncoding Funktioniert nicht beim Speichern!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Velindos »

Hallo Leute,
wollte das AESEncoding speichern und laden, bringt die Sache nicht decodiert!

Code: Alles auswählen

; AESEncoder SPECIHERN
;
Global KKeyFile.s = "D:\TESTKEY.txt"
Global *CipheredString   
Global *DecipheredString   

Global String$ = "Hello this is a test for AES"

*CipheredString   = AllocateMemory(Len(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(Len(String$) + SizeOf(Character)) ; mit seiner abschließenden Null (ASCII-Modus)

If AESEncoder(@String$, *CipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
  Debug "Ciphered: "+PeekS(*CipheredString)
  ; --------------------------
  KeyFile = CreateFile(#PB_Any, KKeyFile)   
  WriteStringN(KeyFile, PeekS(*CipheredString),#PB_Ascii)  
  ; SetFileAttributes(KKeyFile, #PB_FileSystem_ReadOnly)
  CloseFile(KeyFile)   
  ; --------------------------
  AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
  Debug "Deciphered: "+PeekS(*DecipheredString)
  ; --------------------------
EndIf

DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection


Auslesen:

Code: Alles auswählen

; ------------------------------------------------
; TESTKEY.Key LESEN
; ------------------------------------------------
Global KKEY_FILE.s = "D:\TESTKEY.txt"
; ------------------------------------------------
Global String$
Global *CipheredString 
Global *DecipheredString
; ------------------------------------------------
; wenn die Datei ge?ffnet werden konnte, setzen wir fort...
If ReadFile(0,KKEY_FILE) 
  ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
  While Eof(0) = 0                 
    ; Key Laden
    String$ = ReadString(0,#PB_Ascii)  
  Wend
  CloseFile(0)     
Else
  Beep_(1200,350)
EndIf
; ------------------------------------------------
Debug "String$: "+String$
; ------------------------------------------------
*CipheredString   = AllocateMemory(Len(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(Len(String$) + SizeOf(Character)) ; mit seiner abschließenden Null (ASCII-Modus)
  ; --------------------------
AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$) + SizeOf(Character), ?Key, 128, 0, #PB_Cipher_ECB)
Debug "Deciphered: "+PeekS(*DecipheredString)
; ------------------------------------------------
DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection

-
Jemand eine Ahnung warum das nicht geht?

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von mk-soft »

Nicht als String Speichern , sondern als Data

Ausserdem ist die länge von String falsch (Unicode). Also StringByteLen oder String in ASCII wandeln

Alles in ASCII oder alles in Unicode ...

Code: Alles auswählen

; AESEncoder SPECIHERN
;
Global KKeyFile.s = "D:\Ablage\TESTKEY.txt"
Global *CipheredString   
Global *DecipheredString   

Global String$ = "Hello this is a test for AES"

*CipheredString   = AllocateMemory(Len(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(Len(String$) + SizeOf(Character)) ; mit seiner abschließenden Null (ASCII-Modus)

*String = Ascii(String$)
If AESEncoder(*String, *CipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
  Debug "Ciphered: "+PeekS(*CipheredString, -1, #PB_Ascii)
  ; --------------------------
  KeyFile = CreateFile(#PB_Any, KKeyFile)   
  WriteStringN(KeyFile, PeekS(*CipheredString, -1, #PB_Ascii), #PB_Ascii)  
  ; SetFileAttributes(KKeyFile, #PB_FileSystem_ReadOnly)
  CloseFile(KeyFile)   
  ; --------------------------
  AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
  Debug "Deciphered: "+PeekS(*DecipheredString, -1, #PB_Ascii)
  ; --------------------------
EndIf
FreeMemory(*String)

DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Velindos »

Hallo mk-soft!

Danke für deinen Tipp. Habe die Sache in ein Beispiel mit speichern/laden eingearbeitet!

Code: Alles auswählen

Hallo mk-soft!

Danke für deinen Tipp. Habe die Sache in ein Beispiel mit speichern & laden eingearbeitet, funzt!

[code]; ------------------------------------------------
; AESEncoder SPECIHERN/AUSLESEN des String
; ------------------------------------------------
Global String$
Global KKeyFile.s = "D:\Ablage\TESTKEY.txt"
Global *CipheredString   
Global *DecipheredString   

Global String$ = "Hello this is a test for AES in ASCII"

;{ EINLESEN
; =============================================
*CipheredString   = AllocateMemory(Len(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(Len(String$) + SizeOf(Character)) ; mit seiner abschließenden Null (ASCII-Modus)
; =============================================
*String = Ascii(String$)
; =============================================
If AESEncoder(*String, *CipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
  Debug "Ciphered: "+PeekS(*CipheredString, -1, #PB_Ascii)
EndIf
; =============================================
KeyFile = CreateFile(#PB_Any, KKeyFile)   
WriteStringN(KeyFile, PeekS(*CipheredString, -1, #PB_Ascii), #PB_Ascii)  
SetFileAttributes(KKeyFile, #PB_FileSystem_ReadOnly)
CloseFile(KeyFile)   
; =============================================
FreeMemory(*CipheredString)
FreeMemory(*DecipheredString)
; =============================================
;}
; =============================================
Delay(500)
; =============================================
;{ AUSLESEN
; =============================================
; wenn die Datei ge?ffnet werden konnte, setzen wir fort...
If ReadFile(0,KKeyFile) 
  ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
  While Eof(0) = 0                 
    ; Key Laden
    String$ = ReadString(0,#PB_Ascii)  
    Debug "Ciphered: "+String$
  Wend
  CloseFile(0)     
Else
  Beep_(1200,350)
EndIf
; =============================================
*CipheredString   = AllocateMemory(Len(String$)) ; Platz für den null-terminierten String
*DecipheredString = AllocateMemory(Len(String$)) ; mit seiner abschließenden Null (ASCII-Modus)

; ------------------------------------------------
PokeS(*CipheredString, String$ , Len(String$) + SizeOf(Character), #PB_Ascii) 
; ------------------------------------------------
AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
Debug "Deciphered: "+PeekS(*DecipheredString, -1, #PB_Ascii)
; --------------------------
FreeMemory(*String)
FreeMemory(*CipheredString)
FreeMemory(*DecipheredString)
; --------------------------
;}
; =============================================
DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection
; --------------------------
Nochmals DANKE!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Thorsten1867 »

Du kannst ja mal einen Blick auf mein Modul werfen:
qAES_Module.pbi
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Velindos »

Hallo Thorsten1867,
besten Dank für dein Angebot. Hab es mir angesehen, gut zu wissen das es dies gibt!
Gute Idee, für sicheren Transport!

In meinen Fall speichere ich lediglich meine Velindos Key Datei damit ab und die ist nicht länger wie im Beispiel!

Also nochmals besten DANK für euere Mithilfe!!!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von NicTheQuick »

Denk daran den Key nicht in der Datasection zu lassen, sondern mit einer Hashfunktion zu berechnen, nachdem der User das Passwort eingegeben hat. Ansonsten macht es ja keinen Sinn überhaupt zu verschlüsseln.
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Velindos »

Hallo NicTheQuick!
Hashfunktion zu berechnen
Danke für deinen Hinweis auf Hashfunktion. Brauche es nicht im Velindos, da ich kein Passwort eingegebe!

Würde mich interessieren, wie die Hashfunktion zu berechnen ist! Vielleicht jemand ein kurzes Beispiel!

Nochmals Danke für die Tip´s und Anregungen!

Gruss .. Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6994
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von STARGÅTE »

Velindos hat geschrieben: 24.05.2022 08:29 Hallo NicTheQuick!
Hashfunktion zu berechnen
Danke für deinen Hinweis auf Hashfunktion. Brauche es nicht im Velindos, da ich kein Passwort eingegebe!

Würde mich interessieren, wie die Hashfunktion zu berechnen ist! Vielleicht jemand ein kurzes Beispiel!

Nochmals Danke für die Tip´s und Anregungen!

Gruss .. Velindos!
NicTheQuick meint, du solltest eine dynamische Eingabe eines Passworts ermöglichen, aus dem dann z.B. mit SHA-3 (Hashfunktion) ein 256 bit Key für ASE generiert wird, damit dieser Key nicht in der DataSection liegt, wo man ihn lesen kann. Ansonsten kannst du dir diese ganze Verschlüsselung sparen ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von Velindos »

Hallo STARGÅTE,

Danke für den Hinweis!

Wenn ich das nun richtig verstehe ist der Schlüssel der Vercodung der Key!
DataSection
Key:
Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection
Nun dann ergibt sich die Frage wie erstelle ich diesen Schlüssel?
Gibt es hierfür einen Befehl oder Routine?

Gruss .. Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6994
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: AESEncoding Funktioniert nicht beim Speichern!

Beitrag von STARGÅTE »

Das ist richtig. Natürlich kann dieser Schlüssel, welcher hier 256 Bit lang ist (16 Byte) beliebig gewählt werden.
Mann könnte auch einfach ein 16 Byte lange Zeichenkette nutzen.
Üblicherweise wird ein solcher Schlüssel aber mit einer Hash-Funktion, wie zum Beispiel SHA-3, aus einem beliebigen (und beliebig langen) Passwort erzeugt.
Du kannst das in PureBasic mit StringFingerprint() machen.
Wenn du das aber "vorab" machst, und das Ergebnis (also den Key) einfach als DataSection in den Code schreibst, ist er später in der EXE frei einsehbar.
Bitte verstehe das nur als Sicherheitshinweis. Je nach dem was du eigentlich vor hast, kann das entweder "egal" sein oder aber ein Sicherheitsrisiko darstellen, wenn du Sensible Daten denkst zu verschlüsseln, den Schlüssel aber mit dazu legst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten