Bilderverschlüssler

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Bilderverschlüssler

Beitrag 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:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag von dige »

Wofür soll das denn gut sein?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag 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 ...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag 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).
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag 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 ...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten