Problem mit meinem Verschlüsselungs programm

  • Hey .. bin grad dabei ein programm zu schreiben welches ein verzeichnis rekursiv einliest verschlüsselt und in eine datei schreibt ..

    diese datei sieht gerade folgendermaßen aus:

    Code
    <check>viele buchstaben</check>
    <folder>test\1\1$test\1\2$test\1\3$test\1</folder>
    <file>test\1\1\bild1.jpg$content$test\1\2\bild2.jpg$content$test\1\3\bild3.jpg$content</file>
    <password>md5 hash des passwortes</password> (kommt später)


    $ ist ein trennzeichen .. und content steht für den inhalt der jeweiligen datei als binärcode
    die datei - und ordnerpfade sind alle so gekürzt dass der hauptordner (also den ich rekursiv verschlüsseln möchte) vorne steht ..

    mein bisheriges skript ist im anhang

    So jetzt paar meiner probleme:

    ich öffne jede datei im binary-mode .. dann schreibe ich in eine variable ($Output) dateiname$binärcode .. $ ist natürlich ein trennzeichen für das entschlüsseln ..
    wenn ich nun diese variable in eine datei schreibe dann verdoppelt sich die größe .. (also das verzeichnis was ich hab hat zb 100mb dann hat mein output auf einmal 200mb)

    als nächstes: wenn ich das archiv später entschlüsseln möchte hab ich eine funktion _CheckArchive() .. diese überprüft den container ob es sich hierbei um eine datei handelt die auch mit meinem programm erstellt worden ist .. dafür vergleicht sie die werte bei <check>buchstaben</check> .. bei einer datei von 200mb dauert dieser vorgang aber schon locker 18sek .. kann ich das irgendwie anders lösen?

    joa ich glaub das wärs .. wäre super wenn ihr mir weiterhelfen könnt .. weiß einfach net wie ich das machen sollte

  • Zitat

    dann verdoppelt sich die größe .. (also das verzeichnis was ich hab hat zb 100mb dann hat mein output auf einmal 200mb)

    fleissig Funktionen verwenden und nicht mal die Beispiele in der Hilfe anschauen^^...ich verweise mal auf

    [autoit]

    _Crypt_EncryptData()

    [/autoit]

    jedes Zeichen im binärfile wird in eine hex-Darstellung gebracht, dann wird das Ergebnis logischerweise doppelt so groß.

    Zitat

    diese überprüft den container ob es sich hierbei um eine datei handelt die auch mit meinem programm erstellt worden ist


    Da du ja deine Datei konstruieren kannst wie du lustig bist, könntest du als "Header" die 5 Buchstaben "EbRSV" für "EncryptedByReakersSoftwareViva" davorsetzen. Genauso wie MZ bei Exefiles und BM bei Bitmapsdateien als erste Buchstaben stehen....dann musst du zum Prüfen nur die ersten 5 Byte checken

  • oke dann lässt sich die größe also nicht vermeiden ..

    oke dann werde ich das mit Stringleft am besten machen ...

    aber für <file></file> ist wieder das selbe problem .. da müsste ich auch wieder _StringBetween nehmen ..


    und noch ne frage: die Dateien werde ja alle in die Variable $Output geladen .. dh das ist alles im RAM .. aber was passiert wenn der RAM voll ist?

  • Zitat

    aber was passiert wenn der RAM voll ist?

    entweder bekommst du von AutoIt eine dementsprechende Fehlermeldung und das Programm endet dann, oder du reservierst das RAM dynamisch. Beim Überschreiten einer bestimmten, vorher festgelegten Speichergrenze wird der Rest auf freien Festplattenplatz ausgelagert. Das sog. "swappen" merkst du dann am Gerödel der Festplatte. Da die Geschwindigkeit der Platte im Vergleich zum RAM extremst langsam ist, dauert das Gerödel dann auch länger an^^. Im Prinzip ist es kein Problem, eine z.B. 3 Gigabyte große Datei mit 640k Ram zu bearbeiten, du musst dann halt nur "Häppchen" von 200k Größe bearbeiten (entschlüsseln) und diese "Häppchen" dann als entschlüsselte Datei wieder hintereinanderschreiben.