Brauche Hilfe

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Smily

Betreff: Brauche Hilfe

BeitragDo, Dez 29, 2005 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, eigentlich pflege ich ja einen Aussagekräftigen Titel zu nehmen. Aber mir ist einfach nichts eingefallen

Also mein Problem ist Folgendes:

Ich habe ein Programm entwickelt, womit Daten hinter Bildern Verschlüsselt werden können. Nach dem ich die Daten aber verschlüsselt und wieder enschlüsselt habe bekomme ich eine anz andere datei wieder raus
Mein Verschlüsselungscode:
BlitzBasic: [AUSKLAPPEN]
 Textdat$ = RequestFile (\"Bitte eine Datei auswählen, die Verschlüsselt werden soll\", \"*\")
If Textdat$ = \"\" Then Return
Maske$ = RequestFile (\"Bitte ein Bild auswählen\", \"bmp\")
If Maske$ = \"\" Then Return
Save$ = RequestFile (\"Bitte den Speicherort für das neue Bild auswählen\", \"bmp\", 1)
If Save$ = \"\" Then Return
Filein = ReadFile(Textdat$)
Image = LoadImage(Maske)
SizeX = ImageWidth(Image)
SizeY = ImageHeight(Image)
SizeDat = FileSize(Textdat$)
If SizeDat > SizeX * SizeY Then Notify \"Bitte wählen Sie ein Größeres Bild aus.\": Return

Graphics SizeX,SizeY,16,0
Temp = WriteFile(\"Temp.txt\")
WriteInt Temp, SizeDat
Repeat
WriteLine Temp, ReadLine(Filein)
Until Eof(Filein)
CloseFile Temp
CloseFile Filein
Filein = ReadFile(\"Temp.txt\")
SetBuffer FrontBuffer()
DrawImage Image,0,0
WaitKey()
For X = 0 To SizeX
For Y = 0 To SizeY
If Eof(Filein) Then
CloseFile(Filein)
Filein = ReadFile(\"Temp.txt\")
End If
Red = ReadByte(Filein)
Green = ReadByte(Filein)
Blue = ReadByte(Filein)
GetColor X,Y
Color (ColorRed() + Red) / 2,(ColorGreen() + Green) / 2, (ColorBlue() + Blue) / 2
Plot x,y
Next
Next
NewIMG = CreateImage(SizeX, SizeY)
GrabImage NewIMG, 0, 0
SaveImage NewIMG, Save$
CloseFile (filein)
EndGraphics


Und hier der Codeteil zum Entschlüsseln:

BlitzBasic: [AUSKLAPPEN]
 Img$ = RequestFile (\"Welches Bild soll entschlüsselt werden?\", \"bmp\")
If Img$ = \"\" Then Return
OriImg$ = RequestFile (\"Bitte Orginalbild wählen\", \"bmp\")
If OriImg$ = \"\" Then Return
Ziel$ = RequestFile (\"Bitte Ziel angeben\", \"*\", 1)
If Ziel$ = \"\" Then Return
Fileout = WriteFile(Ziel$)
Image = LoadImage(IMG)
Original = LoadImage(OriImg)
SizeX = ImageWidth(Image)
SizeY = ImageHeight(Image)
SizeX2 = ImageWidth(Original)
SizeY2 = ImageHeight(Original)
If SizeX <> SizeX2 Then Notify \"Die beiden Bilder müssen Gleich groß sein\": Return
If SizeY <> SizeY2 Then Notify \"Die beiden Bilder müssen Gleich groß sein\": Return

Graphics SizeX * 2,SizeY,16,0
DrawImage Image, 0, 0
DrawImage Original, SizeX, 0
For X = 0 To SizeX
For Y = 0 To SizeY
GetColor X,Y
Red1 = ColorRed()
Green1 = ColorGreen()
Blue1 = ColorBlue()
GetColor X + SizeX,Y
Red2 = ColorRed()
Green2 = ColorGreen()
Blue2 = ColorBlue()

Byte1 = 2*Red1 - Red2
Byte2 = 2*Green1 - Green2
Byte3 = 2*Blue1 - Blue2
WriteByte Fileout, Byte1
WriteByte Fileout, Byte2
WriteByte Fileout, Byte3
Next
Next

Natürlich ist das Programm noch nicht fertig.
Bis jetzt isses eigentlich so geplant, dass in der neuen Textadatei erstmal per INT steht, wie groß sie ist und dannach kommt die Datei selber.
Wo liegt der Fehler?
Ich kann ihn einfach nicht finden Crying or Very sad
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

Kryan

BeitragFr, Dez 30, 2005 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habs mal mit der zeichenfolge "aaa" probiert und da kam folgendes raus:
user posted image

vllt hilft dir das weiter

edit:

du lädst immer wieder die datei:
If Eof(Filein) Then
CloseFile(Filein)
Filein = ReadFile("Temp.txt")
End If

das ist schon mal der größte fehler, von da an sollte er nur noch den rest zeichnen, aber keine daten mehr verwerten...
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Smily

BeitragSa, Dez 31, 2005 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hab ich gemacht, weil man sonst in einem Foto sieht, wo die Verschlüsselte Datei zuende ist.
beispiel:
user posted image

Da aber in den Ersten Pixeln steht, wie groß die Datei ist, Ist es doch egal, dass sich die Datei wiederholt.
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

Ctuchik

BeitragSa, Dez 31, 2005 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab sowas auch mal schnell programmiert weil ich das irgendwie interessant find. Smile
Hier das Resultat:
Code: [AUSKLAPPEN]

Graphics 800,100,0,2
 Repeat
   do$ = Input("1 = Verschlüsseln, 2 = Entschlüsseln: ")
   If do$ = "1" Then Goto enc
   If do$ = "2" Then Goto dec
 Forever
 
 .enc
 Textdat$ = Input ("Bitte eine Datei auswählen, die Verschlüsselt werden soll: ")
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 Save$ = Input ("Bitte den Speicherort für das neue Bild auswählen: ")
 enc(textdat$,maske$,save$)
 End
 
 .dec
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 Save$ = Input ("Bitte den Speicherort für die entschlüsselte Datei auswählen: ")
 dec(maske$,save$)
 End
 

Function enc(txt$,bmp$,save$)
  textdat = ReadFile(txt$)
  image = LoadImage(bmp$)
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)
  SizeTxt = FileSize(txt$)
  If SizeTxt > (SizeX * SizeY + 3) Then RuntimeError("Bitte wählen Sie ein Größeres Bild aus.")

  Graphics SizeX,SizeY,16,2
   image = LoadImage(bmp$)
  SetBuffer BackBuffer()
  DrawBlock image,0,0
  LockBuffer(BackBuffer()) 
  NC((SizeTxt And $000000FF),0,0)
  NC((SizeTxt And $0000FF00) Shr 8,1,0)
  NC((SizeTxt And $00FF0000) Shr 16,2,0)        
  x = 3
  y = 0
  While Not Eof(textdat)
    byte = ReadByte(textdat)
    NC(byte,x,y)
    x = x + 1
    If (x >= SizeX) Then x=0 : y = y + 1   
  Wend
  UnlockBuffer BackBuffer()
  SaveBuffer(BackBuffer(),save$)
  CloseFile(textdat)
  FreeImage(image)
End Function

Function dec(bmp$,save$)
  textdat = WriteFile(save$)
  image = LoadImage(bmp$)
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)
 
  Graphics SizeX,SizeY,16,2
   image = LoadImage(bmp$)
  SetBuffer BackBuffer()
  DrawBlock image,0,0
  LockBuffer(BackBuffer())
  SizeTxt = GB(0,0) + (GB(1,0) Shl 8) + (GB(2,0) Shl 16)
  count = 0
  x = 3
  y = 0
   Repeat
    byte = GB(x,y)
    x = x + 1
    If (x >= SizeX) Then x=0 : y = y + 1   
    WriteByte textdat,byte    
    count = count + 1
    If count = SizeTxt Then Exit   
   Forever
   CloseFile(textdat)
   FreeImage(image) 
End Function

Function NC(byte,x,y)
    a = Floor(byte/49.0)
    byte = byte - (a*49)
    b = Floor(byte/7.0)
    byte = byte - (b*7)
    c = byte
    clr = ReadPixelFast(x,y)
    red = (clr And $FF0000) Shr 16
    green = (clr And $00FF00) Shr 8
    blue = (clr And $0000FF)
    red = red - (red Mod 7) + a
    green = green - (green Mod 7) + b
    blue = blue - (blue Mod 7) + c
    If red > 255 Then red = red - 7
    If green > 255 Then green = green - 7
    If blue > 255 Then blue = blue - 7
    clrnew = red * $10000 + green * $100 + blue
    WritePixelFast (x,y,clrnew)
End Function

Function GB(x,y)
    clr = ReadPixelFast(x,y)
    a = ((clr And $FF0000) Shr 16) Mod 7
    b = ((clr And $00FF00) Shr 8) Mod 7
    c = (clr And $0000FF) Mod 7
    byte = a*49 + b*7 + c
    Return byte
End Function
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!
  • Zuletzt bearbeitet von Ctuchik am Sa, Dez 31, 2005 17:57, insgesamt einmal bearbeitet

Smily

BeitragSa, Dez 31, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke @Ctuchik
1. Frage: Hast du was dagegen, wenn ich das in meinem Programm verwende?

2. Frage: Ich möchte das So machen, dass man Vor dem Entschlüsseln noch ein weiteres Bitmap angeben soll, welches das Original ist. Das Programm überprüft erst, ob das Angegebene Bitmap das Original vom Verschlüsseltem Bitmap ist. Kann man das Irgendwie machen?
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

Ctuchik

BeitragSa, Dez 31, 2005 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
1. Frage: Hast du was dagegen, wenn ich das in meinem Programm verwende?

Nein, hab nichts dagegen
Zitat:
2. Frage: Ich möchte das So machen, dass man Vor dem Entschlüsseln noch ein weiteres Bitmap angeben soll, welches das Original ist. Das Programm überprüft erst, ob das Angegebene Bitmap das Original vom Verschlüsseltem Bitmap ist. Kann man das Irgendwie machen?

Ja das könnte man machen.
Der Ansatz in meinem Code ist aber ein anderer.
Ich müsste das ganze nochmal komplett neu schreiben!
Übrigens sieht mein Bild dem Original wesentlich ähnlicher als deine, dafür kann man bei dir 3 mal so viele Informationen drin speichern.
Da kommt es halt drauf an was dir wichtiger ist.

EDIT: Ok, ich musste doch nciht alles neu schreiben. Ein paar kleinere Modifikationen haben gereicht!
Man braucht jetzt zum Entschlüsseln die Original-Bitmap!
Man merkt übrigens kaum mehr, dass in dem Bild Informationen gespeichert sind.
Übrigens 1Byte = 1Pixel!
Es ist übrigens noch nicht ganz perfekt! Wenn man versucht ein Bild zu entschlüsseln, dass gar keine Datei enthält oder ein falsches Originalbild benutzt kann das Programm unter Umständen riesige Dateien auf die Festplatte schreiben. Da müsste ich nochmal dran arbeiten!]
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!
  • Zuletzt bearbeitet von Ctuchik am Sa, Dez 31, 2005 19:12, insgesamt einmal bearbeitet

BlitzChecker

BeitragSa, Dez 31, 2005 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir wird die Datei viel grösser!
Aus einem 300kb jpg wurde nachdem ich den Satz "Hallo, dies ist eine geheime Nachricht!!!" eingefügt hatte, ein 1,3 MB jpg. 1 MB für 42 Zeichen?
www.xairro.com

Ctuchik

BeitragSa, Dez 31, 2005 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic speichert die Dateien als Bitmap ab, deswegen ist es größer als die Original-Jpeg!
Generell wird das Bild wenn es im Urzustand auch schon eine Bitmap war überhaupt nciht größer, da die Informationen in den Farbwerten gespeichert werden.
Ausserdem muss das ganze als Bitmap gespeichert werden, weil sonst die Informationen die man im Bild versteckt durch die Jpeg-Kompression verloren gehen würden.
Man kann das ganze natürliche auch als png ohne Qualitätsverlust speichern, aber dazu bräuchte ich halt ne dll die png unterstützt!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

BlitzChecker

BeitragSa, Dez 31, 2005 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrow https://www.blitzforum.de/view...ight=bbimg
www.xairro.com

Ctuchik

BeitragSa, Dez 31, 2005 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, sehr schön!
Werd ich gleich einbauen!
Bis dahin gibts hier mal ein Update:
Die ersten 8 Pixel werden jetzt benutzt um eine Art Signatur zu speichern. Stimmt diese beim Entschlüsseln nicht überein, dann wird abgebrochen.
Dadurch können jetzt Bilder die keine Datei enthalten abgefangen werden!
Code: [AUSKLAPPEN]

Graphics 800,100,0,2
 Repeat
   do$ = Input("1 = Verschlüsseln, 2 = Entschlüsseln: ")
   If do$ = "1" Then Goto enc
   If do$ = "2" Then Goto dec
 Forever
 
 .enc
 Textdat$ = Input ("Bitte eine Datei auswählen, die Verschlüsselt werden soll: ")
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 Save$ = Input ("Bitte den Speicherort für das neue Bild auswählen: ")
 enc(textdat$,maske$,save$)
 End
 
 .dec
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 original$ = Input ("Das Originalbild: ")
 Save$ = Input ("Bitte den Speicherort für die entschlüsselte Datei auswählen: ")
 dec(maske$,original$,save$)
 End
 

Function enc(txt$,bmp$,save$)
  textdat = ReadFile(txt$)
   If textdat = 0 Then RuntimeError("Datei nicht gefunden!") 
  image = LoadImage(bmp$)
   If image = 0 Then RuntimeError("Bild nicht gefunden!")    
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)
  SizeTxt = FileSize(txt$)
  If SizeX < 12 Then RuntimeError("Das Bild muss mindestens 12 Pixel breit sein!")
  If SizeTxt > (SizeX * SizeY + 11) Then RuntimeError("Bitte wählen Sie ein größeres Bild aus.")
  SetBuffer ImageBuffer(image)
  LockBuffer(ImageBuffer(image))
  sig$ = "MYSECRET"
  For i=1 To 8
    NC(Asc(Mid$(sig,i,1)),(i-1),0)
  Next
  NC((SizeTxt And $000000FF),8,0)
  NC((SizeTxt And $0000FF00) Shr 8,9,0)
  NC((SizeTxt And $00FF0000) Shr 16,10,0)        
  x = 11
  y = 0
  While Not Eof(textdat)
    byte = ReadByte(textdat)
    NC(byte,x,y)
    x = x + 1
    If (x = SizeX) Then x=0 : y = y + 1   
  Wend
  UnlockBuffer ImageBuffer(image)
  SaveBuffer(ImageBuffer(image),save$)
  CloseFile(textdat)
  FreeImage(image)
End Function

Function dec(bmp$,orig$,save$)
   image = LoadImage(bmp$)
   If image = 0 Then RuntimeError("Bild nicht gefunden!")
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)   
   original = LoadImage(orig$)
   If original = 0 Then RuntimeError("Original-Bild nicht gefunden!")   
   If SizeX < 12 Then RuntimeError("In diesem Bild ist keine Datei versteckt!")
   If (SizeX <> ImageWidth(original)) Or (SizeY <> ImageHeight(original)) Then RuntimeError("Die beiden Bilder haben nicht die gleiche Größe!")
  sig$ = ""
  For i=0 To 7
    sig$ = sig$ + Chr$(GB(image,original,i,0))
  Next   
  If sig$ <> "MYSECRET" Then RuntimeError("In diesem Bild ist keine Datei versteckt!")
  SizeTxt = GB(image,original,8,0) + (GB(image,original,9,0) Shl 8) + (GB(image,original,10,0) Shl 16)
  count = 0
  x = 11
  y = 0
  textdat = WriteFile(save$) 
   Repeat
    byte = GB(image,original,x,y)
    x = x + 1
    If (x = SizeX) Then x=0 : y = y + 1   
    WriteByte textdat,byte    
    count = count + 1
    If count = SizeTxt Then Exit   
   Forever
   CloseFile(textdat)
   FreeImage(image) 
End Function

Function NC(byte,x,y)
    a = Floor(byte/49.0)
    byte = byte - (a*49)
    b = Floor(byte/7.0)
    byte = byte - (b*7)
    c = byte
    a = a - 3
    b = b - 3
    c = c - 3
    clr = ReadPixelFast(x,y)
    red = (clr And $FF0000) Shr 16
    green = (clr And $00FF00) Shr 8
    blue = (clr And $0000FF)
    If red > 252 Then red = 252
    If red < 3 Then red = 3
    If green > 252 Then green = 252
    If green < 3 Then green = 3
    If blue > 252 Then blue = 252
    If blue < 3 Then blue = 3
    red = red + a
    green = green + b
    blue = blue + c
    clrnew = red * $10000 + green * $100 + blue
    WritePixelFast (x,y,clrnew)
End Function

Function GB(img,orig,x,y)
    clrnew = ReadPixel(x,y,ImageBuffer(img))
    clrold = ReadPixel(x,y,ImageBuffer(orig))
    nred = ((clrnew And $FF0000) Shr 16)
    ngreen = ((clrnew And $00FF00) Shr 8)
    nblue = (clrnew And $0000FF)
    ored = (clrold And $FF0000) Shr 16
    ogreen = (clrold And $00FF00) Shr 8
    oblue = (clrold And $0000FF)   
      If ored > 252 Then ored = 252
    If ored < 3 Then ored = 3
    If ogreen > 252 Then ogreen = 252
    If ogreen < 3 Then ogreen = 3
    If oblue > 252 Then oblue = 252
    If oblue < 3 Then oblue = 3      
    a = nred - ored + 3
    b = ngreen - ogreen + 3
    c = nblue - oblue + 3
    byte = a*49 + b*7 + c
    If byte > 255 Or byte < 0 Then RuntimeError("Fehlerhaftes Bild")
    Return byte
End Function
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Smily

BeitragSa, Dez 31, 2005 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
OK Danke.
Ich versuch mal die Wahrscheinlicheit zu errechnen, dass die Signatur in den ersten 8 Pixeln "Zufällig" Stimmen kann.

also: 256^3^8
ca 6 * 10^57
Also das zufällig 2 Bilder die Gleiche Signatur haben ist die Wahrscheinlichkeit ehr gering
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

Ctuchik

BeitragSa, Dez 31, 2005 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
So, mit Hilfe der Userlib aus dem oben genannten Thread geht das ganze jetzt auch mit Jpeg

Code: [AUSKLAPPEN]
Graphics 800,100,0,2
 Repeat
   do$ = Input("1 = Verschlüsseln, 2 = Entschlüsseln: ")
   If do$ = "1" Then Goto enc
   If do$ = "2" Then Goto dec
 Forever
 
 .enc
 Textdat$ = Input ("Bitte eine Datei auswählen, die Verschlüsselt werden soll: ")
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 Save$ = Input ("Bitte den Speicherort für das neue Bild auswählen: ")
 enc(textdat$,maske$,save$)
 End
 
 .dec
 Maske$ = Input ("Bitte ein Bild auswählen: ")
 original$ = Input ("Das Originalbild: ")
 Save$ = Input ("Bitte den Speicherort für die entschlüsselte Datei auswählen: ")
 dec(maske$,original$,save$)
 End
 

Function enc(txt$,bmp$,save$)
  textdat = ReadFile(txt$)
   If textdat = 0 Then RuntimeError("Datei nicht gefunden!") 
  image = LoadImage(bmp$)
   If image = 0 Then RuntimeError("Bild nicht gefunden!")    
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)
  SizeTxt = FileSize(txt$)
  If SizeX < 12 Then RuntimeError("Das Bild muss mindestens 12 Pixel breit sein!")
  If SizeTxt > (SizeX * SizeY + 11) Then RuntimeError("Bitte wählen Sie ein größeres Bild aus.")
  SetBuffer ImageBuffer(image)
  LockBuffer(ImageBuffer(image))
  sig$ = "MYSECRET"
  For i=1 To 8
    NC(Asc(Mid$(sig,i,1)),(i-1),0)
  Next
  NC((SizeTxt And $000000FF),8,0)
  NC((SizeTxt And $0000FF00) Shr 8,9,0)
  NC((SizeTxt And $00FF0000) Shr 16,10,0)        
  x = 11
  y = 0
  While Not Eof(textdat)
    byte = ReadByte(textdat)
    NC(byte,x,y)
    x = x + 1
    If (x = SizeX) Then x=0 : y = y + 1   
  Wend
  UnlockBuffer(ImageBuffer(image))
  SaveImageAsPNG(save$,image)
  CloseFile(textdat)
  FreeImage(image)
End Function

Function dec(bmp$,orig$,save$)
   image = LoadImage(bmp$)
   If image = 0 Then RuntimeError("Bild nicht gefunden!")
  SizeX = ImageWidth(image)
  SizeY = ImageHeight(image)   
   original = LoadImage(orig$)
   If original = 0 Then RuntimeError("Original-Bild nicht gefunden!")   
   If SizeX < 12 Then RuntimeError("In diesem Bild ist keine Datei versteckt!")
   If (SizeX <> ImageWidth(original)) Or (SizeY <> ImageHeight(original)) Then RuntimeError("Die beiden Bilder haben nicht die gleiche Größe!")
  sig$ = ""
  For i=0 To 7
    sig$ = sig$ + Chr$(GB(image,original,i,0))
  Next   
  If sig$ <> "MYSECRET" Then RuntimeError("In diesem Bild ist keine Datei versteckt!")
  SizeTxt = GB(image,original,8,0) + (GB(image,original,9,0) Shl 8) + (GB(image,original,10,0) Shl 16)
  count = 0
  x = 11
  y = 0
  textdat = WriteFile(save$) 
   Repeat
    byte = GB(image,original,x,y)
    x = x + 1
    If (x = SizeX) Then x=0 : y = y + 1   
    WriteByte textdat,byte    
    count = count + 1
    If count = SizeTxt Then Exit   
   Forever
   CloseFile(textdat)
   FreeImage(image) 
End Function

Function NC(byte,x,y)
    a = Floor(byte/49.0)
    byte = byte - (a*49)
    b = Floor(byte/7.0)
    byte = byte - (b*7)
    c = byte
    a = a - 3
    b = b - 3
    c = c - 3
    clr = ReadPixelFast(x,y)
    red = (clr And $FF0000) Shr 16
    green = (clr And $00FF00) Shr 8
    blue = (clr And $0000FF)
    If red > 252 Then red = 252
    If red < 3 Then red = 3
    If green > 252 Then green = 252
    If green < 3 Then green = 3
    If blue > 252 Then blue = 252
    If blue < 3 Then blue = 3
    red = red + a
    green = green + b
    blue = blue + c
    clrnew = red * $10000 + green * $100 + blue
    WritePixelFast (x,y,clrnew)
End Function

Function GB(img,orig,x,y)
    clrnew = ReadPixel(x,y,ImageBuffer(img))
    clrold = ReadPixel(x,y,ImageBuffer(orig))
    nred = ((clrnew And $FF0000) Shr 16)
    ngreen = ((clrnew And $00FF00) Shr 8)
    nblue = (clrnew And $0000FF)
    ored = (clrold And $FF0000) Shr 16
    ogreen = (clrold And $00FF00) Shr 8
    oblue = (clrold And $0000FF)   
      If ored > 252 Then ored = 252
    If ored < 3 Then ored = 3
    If ogreen > 252 Then ogreen = 252
    If ogreen < 3 Then ogreen = 3
    If oblue > 252 Then oblue = 252
    If oblue < 3 Then oblue = 3      
    a = nred - ored + 3
    b = ngreen - ogreen + 3
    c = nblue - oblue + 3
    byte = a*49 + b*7 + c
    If byte > 255 Or byte < 0 Then RuntimeError("Fehlerhaftes Bild")
    Return byte
End Function

Function SaveImageAsPNG(filename$, image, interlace = 0)
   Local i, x, y, width, height
   Local buffer, bank
   Local c
   Local result
   
   width = ImageWidth(image)
   height = ImageHeight(image)
   buffer = ImageBuffer(image)
   
   bank = CreateBank(width * height * 3 + 1)
   
   LockBuffer buffer
   For y = 0 To height - 1
      For x = 0 To width - 1
         c = ReadPixelFast(x, y, buffer)
         c = ((c And $FF) Shl 16) Or (c And $FF00) Or ((c And $FF0000) Shr 16)

         PokeInt(bank, i, c)
         
         i = i + 3
      Next
   Next
   UnlockBuffer buffer
   
   result = SavePNGFile(filename$, bank, interlace, width, height)
   
   FreeBank(bank)
   
   Return result
End Function
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Smily

BeitragSa, Dez 31, 2005 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Orignalbild wird übrigens immer noch nicht gebraucht.
Es wird nur Geprüft, ob das Orginalbild und das Verschlüsselte die Gleiche Größe haben.

Wenn ich ein Bild 800*600 habe brauche ich nur ein beliebiges anderes 800*600 bild um Das veschlüsselte Bild zu entschlüsseln.

Mir geht es aber darum, dass man ein Verschlüsseltes bild NUR mit dem Orginalbild entschlüsseln kann. Das macht es dann eigentlich sogut wie unmöglich, dass ein Fremder das Bild entschlüsseln mit dem Programm entschlüsseln kann, wenn ich zum beispiel ein Privates Foto für die Verschlüsselung nehme
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

Ctuchik

BeitragSa, Dez 31, 2005 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Bild wird mit HIlfe des Originalbilds entschlüsselt!
Mit einem anderen Bild geht es nicht!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Smily

BeitragSa, Dez 31, 2005 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok.
Nochmal ein Riesenfettes Danke für deine Hilfe Wink
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