Seite 1 von 1

Bilderverschlüssler

Verfasst: 25.07.2005 23:22
von Batze
Vielleicht haben ja einige versucht das Bild zu entschlüsseln.
Hier jedenfalls mal ein etwas komfortablerer Bildverschlüssler:

Code: Alles auswählen

#Pattern  = "Bitmaps (*.bmp)|*.bmp|PortableNetworkGraphics (*.png)|*.png|Alle Dateien|*.*"
#SPattern = "Bitmaps (*.bmp)|*.bmp|PortableNetworkGraphics (*.png)|*.png"

Procedure Verschlusseln(FensterTitel.s, Abstand.l, Zeile.l, ProPlus.f)
  Shared Prozent.f
  For x=0 To ImageWidth()-1
    
    If (x+Zeile) % Abstand = 0
      StartDrawing(ImageOutput())
      For y=0 To ImageHeight()-1
        Color = Point(x,y)
        Plot(x, y, Color ! Random($FFFFFF))
      Next
      StopDrawing()
    EndIf
    
    Prozent + ProPlus
    SetWindowTitle(0, "(" + Str(Prozent) + "%) " + FensterTitel)
    SetGadgetState(0, ImageID())
    Repeat 
      Event = WindowEvent()
      If Event = #PB_Event_Gadget And EventGadgetID() = 3
        ProcedureReturn 0
      EndIf
    Until Event = 0
    
  Next
  
  ProcedureReturn 1
EndProcedure

Procedure SaveImageFile()
  file.s = SaveFileRequester("Bild speichern...", "", #SPattern, 0)
  If file <> ""
    CopyImage(1, 0)
    Plugin.l = SelectedFilePattern() * #PB_ImagePlugin_PNG
    SaveImage(0, file, Plugin)
    SetGadgetState(0, UseImage(1))
    SetWindowTitle(0, GetFilePart(file) + " -  Bildverschlüssler") 
  EndIf
EndProcedure

Procedure OpenImageFile(file.s)
  If file = ""
    file = OpenFileRequester("Bild laden...", "", #Pattern, 0)
  EndIf
  If file <> "" And LoadImage(0, file)
    CopyImage(0, 1)
    ResizeWindow(ImageWidth()+4, ImageHeight()+24)
    If WindowWidth() < 310 : 
      ResizeWindow(310, ImageHeight()+24)
    EndIf
    SetGadgetState(0, UseImage(1))
    SetWindowTitle(0, GetFilePart(file) + " -  Bildverschlüssler")
  Else
    ProcedureReturn 0
  EndIf
  ProcedureReturn 1
EndProcedure

UsePNGImageDecoder()
UsePNGImageEncoder()
Datei.s = ProgramParameter()

OpenWindow(0, 10, 10, 100, 100, #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "<LEER>")
CreateGadgetList(WindowID(0))
  ButtonGadget(1,   2,  2,  60, 18, "Öffnen")
  ButtonGadget(2,  64,  2,  70, 18, "Speichern")
  StringGadget(4, 136,  2, 100, 18, "", #PB_String_Password)
  ButtonGadget(3, 236,  2,  50, 18, "Start")
  ButtonGadget(5, 288,  2,  20, 18, "#", #PB_Button_Toggle)
  StringGadget(6, 136,  2,  50, 18, "1", #PB_String_Numeric) : HideGadget(6, 1)
  StringGadget(7, 188,  2,  48, 18, "1", #PB_String_Numeric) : HideGadget(7, 1)
  ImageGadget (0,   2, 22,  96, 96, 0)
 
  OpenImageFile(Datei)
  
  Repeat
    EventID = WindowEvent()
    
    If EventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case 1 ; Öffnen
          OpenImageFile("")
        Case 2 ; Speichern
          SaveImageFile()
        Case 3 ;Starten
          SetGadgetText(3, "Stop!")
          Title.s = GetWindowTitle(0)
          CopyImage(0, 1)
          Passwort.s = GetGadgetText(4)
          If Len(Passwort) <= 4 : Passwort = "* <'||>-<" : EndIf
          Jumping.f = (100 / Val(GetGadgetText(6)) / ImageWidth())
          Prozent = 0
          RandomSeed( CRC32Fingerprint(@Passwort, Len(Passwort)) )
          For i=1 To Val(GetGadgetText(6))
            If Verschlusseln(Title, Val(GetGadgetText(7)), i, Jumping) = 0
              Break 1
            EndIf
          Next
          SetGadgetText(3, "Start")
          SetWindowTitle(0, Title)
        Case 5 ;# = Einstellungen
          M = GetGadgetState(5)
          HideGadget(4,   M)
          HideGadget(6, 1-M)
          HideGadget(7, 1-M)
          For i=1 To 3
            DisableGadget(i, M)
          Next
      EndSelect
    EndIf 
    
  Until EventID = #PB_Event_CloseWindow

End
Optimieren kann es ja jemand der sich mit Assembler auskennt. :allright:

Verfasst: 26.07.2005 11:32
von dige
Wofür soll das denn gut sein?

Verfasst: 26.07.2005 11:36
von Batze
dige hat geschrieben:Wofür soll das denn gut sein?
Um Bilder zu verschlüsslen.
Ich muss den zwar noch irgendwie sicherer kriegen aber jemand hat halt gefragt ob man das nutzen kann.

Verfasst: 26.07.2005 12:38
von dige
Batze hat geschrieben:
dige hat geschrieben:Wofür soll das denn gut sein?
Um Bilder zu verschlüsslen.
Hehe :lol: das war mir schon klar ...
Die Idee das mit dem Zufallsgenerator zu machen ist schon mal nicht schlecht.
Das würde allerdings wegen dem Bitmap-Header als Datei-Verschlüsselung
nicht ausreichen.

Für PB gibt es doch aber mittlerweile sehr sichere und schnelle Verschlüsselungs-
tools -> siehe PBOSL Libs ...

Verfasst: 26.07.2005 12:45
von Batze
Ich weiß, dass meine Lösung nicht ganz so toll ist, aber ich hatte in der Laberecke einen Wettbewerb gestartet, bei dem es nicht ganz so schwer sein sollte.
Vielleicht kann man ja mit meinem auch was anfangen. :wink:

Verfasst: 26.07.2005 22:18
von THEEX
Die Idee das mit dem Zufallsgenerator zu machen ist schon mal nicht schlecht.
Das würde allerdings wegen dem Bitmap-Header als Datei-Verschlüsselung
nicht ausreichen.
Gerade diese Idee ist nicht gut! Ein Zufallsgenerator erzeugt keine wirklichen Zufälle, womit auch keine oder nur kaum Sicherheit geboten wird.
Es gibt sehr sichere Verschlüsselungen, wo auch öffentliche Schlüssel enthalten (für jeden lesbar) sind. Also könnte man den Schlüssel eventuell schon in den Bitmap-Header schreiben. Leider kenne ich mich selbst nicht wirklich damit aus, hab aber einiges drüber gelesen und es gibt auch recht gute und halbwegs erschwingliche Literatur über Kryptographie (einfach mal bei Amazon schauen).

Verfasst: 26.07.2005 22:54
von Batze
CSprengel hat geschrieben:Ein Zufallsgenerator erzeugt keine wirklichen Zufälle, womit auch keine oder nur kaum Sicherheit geboten wird.
Natürlich erzeugt der keine echten Zufälle, dann ginge mein Code doch garnicht. Das der Code nicht sicher ist ist mir auch klar. Aber ich denke du musst schon alle 4294967296 Möglichkeiten durchgehen um es herraus zu bekommen.

Verfasst: 27.07.2005 12:10
von dige
Das mit den "Zufalls"-Zahlen ist schon cool, denn die kann man ja mit
RandomSeed() explizit reproduzieren... von daher ist die Verschlüsselung
schon besser als eine konstante XOR Verknüpfung ...

Verfasst: 27.07.2005 12:16
von Batze
Ich denke halt, wenn man das etwa 30 mal mit verschiedenen RandomSeed() machen würde müsste es recht sicher sein.

Edit:
Ich will das eigentlich mal optimieren, hab aber keine Ahnung wie.
Hat vielleicht jemand eine Idee, wie ich das schneller kriege?