Problem mit Stegoprogramm

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Smily

Betreff: Problem mit Stegoprogramm

BeitragFr, Feb 23, 2007 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho,
Ich habe mir gestern den Film Numbers angesehen und habe dort eine Inspiration für ein neues Projekt gefunden:

Ein Stegano-programm, welches ein Bild in einem anderen Verstecken kann.
Ich habe das Programm jetzt in den Grundzügen auch schon funktionsfähig.

Nun wollte ich aber mal ein passwort mit reinnehmen, aber nun wird das Bild nicht mehr richtig Entschlüsselt.

Hier ist erstmal die Version ohne Passwort (Die Bilder dafür findet ihr bei WinXP unter "Eigene Bilder\Beispielbilder":

Verschlüsseln:
Code: [AUSKLAPPEN]
img1 = LoadImage("Sonnenuntergang.jpg")
img2 = LoadImage("wasserlilien.jpg")
gx = ImageWidth(img1)
gy = ImageHeight(img1)
cgx = ImageWidth(img2)
cgy = ImageHeight(img2)

If cgx <> gx RuntimeError "Die Bilder müssen gleich groß sein"
If cgy <> gy RuntimeError "Die Bilder müssen gleich groß sein"


LockBuffer ImageBuffer(img1)
LockBuffer ImageBuffer(img2)

For x = 0 To gx-1
 For y = 0 To gy-1
  s = s + 1
  c1 = ((Readpixelfast(x,y,imagebuffer(img1)) And %111100001111000011110000) Shr 4)
  c2 =  ReadPixelFast(x,y,imagebuffer(img2)) And %111100001111000011110000
  WritePixelFast(x,y,c1 Or c2 ,imagebuffer(img1))
 Next
Flip
next

UnlockBuffer ImageBuffer(img1)
UnlockBuffer ImageBuffer(img2)

SaveImage img1, "test2.bmp"


Entschlüsseln:
Code: [AUSKLAPPEN]
img = LoadImage("test2.bmp")
Gx = ImageWidth(img)
gy = ImageHeight(img)

LockBuffer ImageBuffer(img)

For x = 0 To gx-1
 For y = 0 To gy-1
  c=ReadPixelFast(x,y,imagebuffer(img)) Shl 4
  WritePixelFast(x,y,c,imagebuffer(img))
 Next
next
UnlockBuffer ImageBuffer(img)
SaveImage(img,"test.bmp")


Hier funktioniert noch alles Prima.

und da ist die Version mit Passwort:
Verschlüsseln:
Code: [AUSKLAPPEN]
pw1$ = "098f6bcd4621d373cade4e832627b4f6"

For x = 1 To Len(pw1$) Step 2
 z1 = val(Mid$(pw1$,x,1))
 z2 = val(mid$(pw1$,x+1,1))
 pw$ = pw$ + Chr$(z1*16+z2)
Next

img1 = LoadImage("Sonnenuntergang.jpg")
img2 = LoadImage("wasserlilien.jpg")
gx = ImageWidth(img1)
gy = ImageHeight(img1)
cgx = ImageWidth(img2)
cgy = ImageHeight(img2)

If cgx <> gx RuntimeError "Die Bilder müssen gleich groß sein"
If cgy <> gy RuntimeError "Die Bilder müssen gleich groß sein"


LockBuffer ImageBuffer(img1)
LockBuffer ImageBuffer(img2)

For x = 0 To gx-1
 For y = 0 To gy-1
  s = s + 1
  check1 = Asc(mid$(pw$,(s Mod Len(pw$))+1,1)) And %1111
  check2 = Asc(mid$(string(pw$,2),(s Mod Len(pw$))+2,1)) And %1111
  check3 = Asc(mid$(string(pw$,2),(s Mod Len(pw$))+3,1)) And %1111
  c1 = ((Readpixelfast(x,y,imagebuffer(img1)) And %111100001111000011110000) Shr 4)
  c1 = c1 Xor (check1 + check2*256+check3*256^2)
  c2 =  ReadPixelFast(x,y,imagebuffer(img2)) And %111100001111000011110000
  WritePixelFast(x,y,c1 Or c2 ,imagebuffer(img1))
 Next
Flip
next

UnlockBuffer ImageBuffer(img1)
UnlockBuffer ImageBuffer(img2)

SaveImage img1, "test2.bmp"

Function val(hx$)
 Select hx$
  Case "a": Return 10
  Case "b": Return 11
  Case "c": Return 12
  Case "d": Return 13
  Case "e": Return 14
  Case "f": Return 15
  Default:  Return hx
 End select
end function


und Entschlüsseln:
Code: [AUSKLAPPEN]
pw1$ = "098f6bcd4621d373cade4e832627b4f6"

For x = 1 To Len(pw1$) Step 2
 z1 = val(Mid$(pw1$,x,1))
 z2 = val(mid$(pw1$,x+1,1))
 pw$ = pw$ + Chr$(z1*16+z2)
Next
Print pw$

img = LoadImage("test2.bmp")
Gx = ImageWidth(img)
gy = ImageHeight(img)

LockBuffer ImageBuffer(img)

For x = 0 To gx-1
 For y = 0 To gy-1
  c=ReadPixelFast(x,y,imagebuffer(img)) Shl 4

  check1 = Asc(mid$(pw$,(s Mod Len(pw$))+1,1)) And %1111
  check2 = Asc(mid$(string(pw$,2),(s Mod Len(pw$))+2,1)) And %1111
  check3 = Asc(mid$(string(pw$,2),(s Mod Len(pw$))+3,1)) And %1111

   c = c Xor (check1 + check2*256+check3*256^2)
   
   WritePixelFast(x,y,c,imagebuffer(img))
 Next
next
UnlockBuffer ImageBuffer(img)
SaveImage(img,"test.bmp")


Function val(hx$)
 Select hx$
  Case "a": Return 10
  Case "b": Return 11
  Case "c": Return 12
  Case "d": Return 13
  Case "e": Return 14
  Case "f": Return 15
  Default:  Return hx
 End select
End function


Ich weis einfach nicht was hier schiefläuft.
Soweit ich das sehe wird hier beim Verschlüsseln auf den zu verschlüsselnden farbcode eine einfache Xor-Verschlüsselung durchgeführt.
Und beim Entschlüsseln wird auf den Ausgelesenen wird der Farbcode mit xor wieder zurück-verschlüsselt.

Wieso funktioniert das dann aber nicht?

thx4help,
Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Smily

BeitragSa, März 03, 2007 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
sry fürs Pushen.
Aber es muss doch irgendwen geben, der mir helfen kann...
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group