PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von jacdelad »

Schau mal in die Hilfe: https://www.purebasic.com/german/docume ... ysize.html
PackEntrySize() funktioniert nur nach ExaminePack()/NextPackEntry()!
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von DarkDragon »

Das funktioniert aber nur mit AddPackMemory und UncompressPackMemory vermutlich und nicht mit CompressMemory und UncompressMemory. Aber vermutlich war das sowieso eher das Ziel.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

(OPEN) UnCompress File save as

Beitrag von ChrigiGee »

Hallo Lieber jacdelad,

Ich habe mir das Gestern Nacht noch zu Gemüte geführt.
Habe ich auch versucht in meine etwas müdes Gehirn zu transferieren.

Wahrscheinlich hackte es an der Mitternächtlichen Zeit um die zusammenhänge zu verstehen.
Vielen Dank für Deine weiterführenden Erkenntnisse für mich.

Liebe Grüsse aus meinem Backofen in Bern
Christian
jacdelad hat geschrieben: 30.07.2024 05:29 Schau mal in die Hilfe: https://www.purebasic.com/german/docume ... ysize.html
PackEntrySize() funktioniert nur nach ExaminePack()/NextPackEntry()!
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

(OPEN) UnCompress File save as

Beitrag von ChrigiGee »

Hallo DarkDragon,

Du meinst dass es von Vorteil wäre, vom PackMemory() resp. CompressMemory() auf eine andere Route zu wechseln.

Sprich dass ich das Vorhaben über AddPackMemory beginne resp. weiterführe zu UnPackMemory wo sich die Problematik von
Container Grösse Original zu, zu extrahierenden Container Vergleiche etwas einfacher umsetzen lassen, resp. die Umkehr Prozesse
vom Packen zum EntPacken eher einfacher aufgebaut werden könnten ?

Sorry, mein Hirn ist noch nicht ganz aufgewacht und ich Formulieren wieder mal Konstrukte welche schwer Verständlich sind wahrscheinlich.

Ich versuche mich in diese beiden Möglichkeiten mich Heute den Tag hindurch etwas einarbeiten zu können.
Vielleicht komme ich da besser zum Ziel.

Ich Danke Euch allen, für die Hilfe bis jetzt.

Liebe Grüsse aus Bern
Christian
DarkDragon hat geschrieben: 30.07.2024 06:33 Das funktioniert aber nur mit AddPackMemory und UncompressPackMemory vermutlich und nicht mit CompressMemory und UncompressMemory. Aber vermutlich war das sowieso eher das Ziel.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von DarkDragon »

CompressMemory/Uncompressmemory ist dazu gedacht einen Speicherblock zu komprimieren. Um das packen würdest du dich kümmern, dann müsstest du die Originalgröße mit speichern. Z.B. wenn du mit einem Server kommunizierst bei dem man irgendein Protokoll einhalten muss oder wenn du dein eigenes Ding durchziehen willst.

AddPackMemory ist dazu gedacht eine Datei zu einem Archiv (zip, ...) hinzuzufügen. Diese Anforderung hab ich aus deinem Code gelesen, war mir davor nicht bekannt.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von ChrigiGee »

Hallo DarkDragon,

Sorry, ich denke 7 Sachen und erklärte nicht das drum herum.

Es geht mir in etwa darum den Makro Rekorder den ich in einem anderen Post hervorgeholt habe aus der Versenkung
etwas auf zu arbeiten und erweitern.

https://www.purebasic.fr/german/viewtopic.php?t=30845

Sagen wir ich habe den Aufgenommenen Makro Teil und das möchte ich gerne so abspeichern, so
dass nicht gerade jeder weis was darin ist. Ich könnte jetzt sagen Text Datei im Speicher und end Datei
auf dem Datenträger wäre dann eine Verschlüsselte Datei.

Da ich jedoch nicht unbedingt ein eigenes Datei Format erstellen kann da mir die nötigen Kenntnisse Fehlen wollte
ich das ganze etwas vereinfachen.

Ich möchte in den weiteren Schritten, die Aufzeichnung der Mausschritte sowie der Keyboard Eingabe in ein File abspeichern
damit ich es immer wieder öffnen und wiedergeben kann.

Und vielleicht auch mögliche weitere Funktionen Integrieren.

Liebe Grüsse

Christian
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von H.Brill »

Nimm dir doch die eingebaute Cipher - Library zur Hand.
Dort sind ja einige Verschlüsselungs-Methoden drin Ganz leicht zu benutzen ist z.b.
die Base64 - Verschlüsselung. Das bekommt man auch nicht ganz zu leicht geknackt.
Kannst ja mit einem zweiten anderen Algo (z.b. AES) nochmals verschlüsseln, wenn du möchtest.
Hast ja die Auswahl, ob nun mit oder ohne Paßwort.
PB 6.10
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PackMemory() + Error Meldungen PB 6 oder Syntax Check (gelöst)

Beitrag von DarkDragon »

Also die Packer library ist zum komprimieren da und bietet keine Verschlüsselungsmechanismen. Die Cipher library ist da schon richtiger, aber Base64 ist nur eine andere Darstellungsform (Kodierung), keine Verschlüsselung.

Für eine Verschlüsselung benötigt man einen Schlüssel. AES wäre hier naheliegend.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

zwischen Frage AES als Datei Container zu verwenden

Beitrag von ChrigiGee »

Hallo DarkDragon,
Hallo @All

Das mittels AES als Datei Speicher wäre natürlich die Lösung.
https://www.purebasic.com/german/docume ... coder.html

Wenn ich mir die Vorlage bei PB Anschaue, brauche ich einen Key. (Schlüssel wie im Beispiel zu #PB_Cipher_ECB
https://www.purebasic.com/german/docume ... erkey.html

Alles darum ist OK, ich frage mich nun, wenn ich zu Faul bin, könnte ich den Schlüssel anhand der GUID Generieren.

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)
GUID als HEX ausgeben habe ich auch gesehen, aber da der Key im Beispiel eine gewisse Formatierung voraussetzt,
kann ich nun den erstellten GUID HEX Wert nicht einfach so übernehmen.

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)

  ; Zeigt den Schlüssel an
  ShowMemoryViewer(*Key, 32)
  
Somit hätte ich nun aus der GUID einen HEX Schlüssel generiert.
Schaut jedoch komplett different aus zwischen
18 B6 E7 89 97 DE 0D FE 84 89 15 4B 57 A2 51 B2

und dem was im Source Beispiel aus AES-Encoder Steht:
$06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06

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
Ich muss für die Vorlage diesen ja Formatieren. Kann ich das auch Automatisiert bewerkstelligen ?

Und ich habe bereits die Suche angeschmissen, aber HEX, Formatieren, GUID da spukt das Board
wilde Sachen aus und durch das ganze von A bis Z durchlesen wird etwas viel,
deswegen meine abgekürzte Form und Fragen.

Ja, ich habe natürlich geschaut wo ich den einen oder anderen Code verwenden und zusammen zu bringen.
Und mir ist auch bewusst dass meine Source jetzt auch nicht gerade den Schönheitswettbewerb gewinnt.

Langsam merke ich dass meine Konzentration nachlässt, und ich hoffe dass noch alles Verständlich ist.

Liebe Grüsse
Christian

PS: Hier also meine Vorläufige gebundene Arbeit, welche so noch nicht Funktioniert.

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
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: zwischen Frage AES als Datei Container zu verwenden

Beitrag von jacdelad »

ChrigiGee hat geschrieben: 30.07.2024 22:57 aber da der Key im Beispiel eine gewisse Formatierung voraussetzt
Der Key selbst setzte keine Formatierung voraus. Der Key im Beispiel ist 16 Byte lang, ob du die als einzelne Byte im Code hinterlegst, oder 4 Longs benutzt, oder einen Speicherbereich mit der Größe 16 Byte ist unerheblich. Du kannst auch einen größeren Speicherbereich benutzen und die Adresse entsprechend verschieben, usw...

Vielleicht wäre es besser, nicht alles in einen Thread zu schreiben. Wer das später mal liest blickt hier gar nicht mehr durch.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Antworten