String in JPG schreiben

  • Hallo wie kann ich das machen dass ich einen String wie zb Test am Anfang eines Bildes schreibe (Ist egal ob man des Bildes dann nicht mehr öffnen kann)

    wichtig wäre dass man diesen string dann auch wieder löschen kann...

    ich jab jetzt so ziemlich alles probiert über FileOpen($hFile, 16) Binär öffnen lassen dann den string ins binäre umzuwandne und dann reinzuschreiben
    dann einfach so am anfang der datei aber ich bekomms einfach net hin

  • das würde bloß leider ziemlich lange dauern wenn ich jede datei einlesen muss und dann wieder schreiben

    das sind ca 1400mb ...

    ps es sollte so sein dass wenn ich den string reinschreibe die datei "kaputt" ist und wenn der string wieder gelöscht wird die Datei wieder funktioniert...

    funktioniert das irgendwie mit FileSetPos und dann den string reinschreiben?

  • um einen string in eine bzw. alle dateinen schreiben musst du natürlich alle dateien öffnen wie soll das sinst gehn was hast du dir da vorgestellt xD

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Darter Ich habe geschrieben dass ich nicht die komplette Datei einlesen möchte und dann den kompletten String wieder zu schreiben, sondern einfach nur einen Text am Ende der Datei hinzufügen zb! Das würde sonst viel zu lange dauern...

    @TheShadow

    funktioniert irgendwie net richtig

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #Include <String.au3>
    #include <File.au3>
    Const $sFile = @DesktopDir & "\test.jpg"

    [/autoit] [autoit][/autoit] [autoit]

    FileDelete($sFile)
    FileCopy("C:\Users\Marcel\Pictures\14.5.08\CIMG9886.jpg", $sFile)

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen($sFile, 16)
    MsgBox(0, "", BinaryLen(Binary(FileRead($sFile))))
    FileSetPos($hFile, 0, $FILE_END)
    FileWrite($hFile, StringToBinary("023452"))
    If @error then MsgBox(0, "", @error)
    MsgBox(0, "", BinaryLen(Binary(FileRead($sFile))))

    [/autoit]
  • Aber ich hoffe du weist, dass sie Dateien dann nicht wirklich unbrauchbar sind? Du nimmst dir einen Editor der die Dateien binär öffnest und die Datei ist wieder heile.
    Ich mache gerade ein Programm (bzw. bin jetzt fertig) das braucht zwar lange und kann keine so großen Dateien verschlüsselt, aber es macht die Dateien ohne Passowrt komplett unbrauchbar

  • ja aber um einen string an ein dateiende oder anfang anzuhängen muss diese datei numal geöffnet werden

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Er sagte Dateianfang, aber klar dass die Datei offen sein muss, das hat er ja auch gesagt, er will nur nicht die ganze Datei ein und auslesen, er will nur an Anfang etwas schreiben, das bringt für unerfahrene Nutzer bei binären Dateien, dass sie nicht mehr geöffnet werden :D

  • naja ich bin halt grad dabei eine "OrdnerVerschlüsselung" zu schreiben, da mich bei großen datenmengen das ankotzt dass mein Laptop für 1,5 GB ca 5 min jedes mal braucht...

    nun ja ich bin soweit dass alle Dateinamen und Ordnernamen aus dem angegeben Pfad rekursiv verschlüsselt werden..jetzt muss ich nur noch die dateien auch unbrauchbar machen nicht dass man zb aus §Qawet34.k3a wieder Test.jpg macht und das wieder öffnen kann...

    jetzt muss ich halt noch irgendwas machen damit die Dateien beschädigt sind und sie somit auch nicht mehr anzeigbar sind

  • und was ist da so schwer

    fileopen()
    filewrithe()
    fileclose()

    fertig

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Das dürfte in die eine Richtung relativ schnell gehen.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $string = "12345"
    Local $stringfile = @ScriptDir & "\Temp.txt"
    Local $aFiles = _FileListToArray(@ScriptDir, "*.jpg", 1)
    FileWrite($stringfile, $string)
    For $i = 1 To $aFiles[0]
    RunWait(@ComSpec & " /c " & 'copy /b "' & $stringfile & '" + "' & @ScriptDir & "\" & $aFiles[$i] & '" "' & @ScriptDir & "\X_" & $aFiles[$i] & '"', "", @SW_HIDE)
    Next
    FileDelete($stringfile)

    [/autoit]
  • Hallo Reaker,

    Darter Ich habe geschrieben dass ich nicht die komplette Datei einlesen möchte und dann den kompletten String wieder zu schreiben, sondern einfach nur einen Text am Ende der Datei hinzufügen zb! Das würde sonst viel zu lange dauern...

    wenn du in den Anfang schreibst, überschreibst du ja Daten des Bildes, das dann warscheins unbrauchbar ist aber mindestens verfälscht ist, wie willst du den Ursprung wiederherstellen, woher weisst du dann was an dieser Stelle stand.

    schau dir

    [autoit]

    _Crypt_EncryptFile
    _Crypt_DecryptFile

    [/autoit]

    in der Hilfe an, vielleicht hast du dann eine bessere Idee

    mfg (Auto)Bert

  • wie gesaft einfach

    fileopen()
    filewrithe()
    fileclose()

    dann hängt er was hinten dann und ich denke das müsste reichen um eine datei zu verfälschen oder?!?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Darter
    mein gott .. wenns doch so leicht ist dann schreibs doch mal selber...ich glaube da wirst du sehr sehr schnell and eine Grenzen stoßen

    @Funkey...hm verstehe das nicht so ganz

    und autoBert

    naja ich würde einfach am Ende der Datei zb "798797" schreiben damit ist die datei unbrauchbar und später beim entschlüsseln einfach wieder diesen string rauslöschen
    weiß bloß nicht wie das geht weil er nie richtig in die datei schreibt

  • mit diesem _Crypt_DecryptFile ... wie siehts da ungefähr mit der Geschwindigkeit aus? -- eher langsam oder im Rahmen des Akzeptablen?

  • So du willst in mehrere Dateien einen string reinhängen und hier ist eine Lösung


    Spoiler anzeigen
    [autoit]

    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $string = "ich bins^^"
    Local $aFiles = _FileListToArray(@ScriptDir, "*.jpg", 1)
    For $i = 1 To $aFiles[0]
    Fileopen($aFiles[$i], 1)
    FileWrite($aFiles[$i], $string)
    Fileclose($aFiles[$i])
    Next

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (29. März 2010 um 18:38)

  • Ich habe mal aus Spaß an eine JPG ein Text geschireben das Bild war vollkommen gleich, am Anfang stehen die 3 Zeichen, dass es eine binäre oder eine Bild-Datei ist

    EDIT: Darter
    Du hast einen Fehler FileOpen hat Standard Mode 0 und das ist lesen

  • mit diesem _Crypt_DecryptFile ... wie siehts da ungefähr mit der Geschwindigkeit aus? -- eher langsam oder im Rahmen des Akzeptablen?

    einfach mit den Beispielskripten in der Hilfe und den verschiedenen Algorytmen testen

    mfg (Auto)Bert

  • also ich hab jetz mal durchgetestet und die DES-Verschlüsselung ist die schnellste auch wenns nur paar ms sind...

    also ich hab mal hochgerechnet und für 1400mb bräuchte das Skript 1.12 min
    mit meinem üblichem Rar entpacken brauche ich 3min das ist ja schonmal ein gelungener fortschritt