Bilder verschlüsseln (gelöst)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

JimBobBalou

Betreff: Bilder verschlüsseln (gelöst)

BeitragMo, Apr 28, 2008 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe vor ein Programm zu schreiben, mit dem ich Bilder ver/entschlüsseln kann:
Code: [AUSKLAPPEN]
;Programm zum Verschlüsseln----------------------------
quelle$ = Input("Dateiname (mit Dateiendung (z.B. jpg):")
encryptionkey$ = Input("Schlüssel (beliebige Zeichenfolge, wird auch zum entschlüsseln benötigt):")
readID = ReadFile (quelle$)
writeID = WriteFile (quelle+".crypt")
While Not Eof (readID)
readrow$ = ReadLine$ (readID)
WriteLine writeID,Encrypt$(readrow$,encryptionkey$)
Wend
Print "Fertig verschlüsselt!"
Print "Drücke eine Taste um zu beenden."
WaitKey
;------------------------------------------------------
Function Encrypt$(daten$,Key$)
PlainLen = Len(daten$)
KeyLen = Len(Key$)
PrevChar = 0
For I = 1 To PlainLen
KeyChar = Asc(Mid(Key$,(I-1) Mod KeyLen + 1,1))
PlainChar = Asc(Mid(daten$,I,1))
CipherChar = (PlainChar + KeyChar + PrevChar) Mod 256
Cipher$ = Cipher$ + Chr(CipherChar)
PrevChar = CipherChar
Next
Return Cipher$
End Function

Code: [AUSKLAPPEN]
;Programm zum Entschlüsseln-----------------
quelle$ = Input("Dateiname (mit Dateiendung (z.B. jpg):")
ext$ = Input("Gebe den neuen Dateinamen an (mit Endung)")
decryptionkey$ = Input("Schlüssel (Zeichenfolge, die beim Verschlüsseln angegeben wurde):")
readID = ReadFile (quelle$)
writeID = WriteFile (ext)
While Not Eof (readID)
readrow$ = ReadLine$ (readID)
WriteLine writeID,Decrypt$(readrow$,decryptionkey$)
Wend
Print
Print "Fertig entschlüsselt!"
Print "Drücke eine Taste um zu beenden."
WaitKey
;-----------------------------------------
Function Decrypt$(Cipher$,Key$)
CipherLen = Len(Cipher$)
KeyLen = Len(Key$)
PrevChar = 0
For I = 1 To CipherLen
KeyChar = Asc(Mid(Key$,(I-1) Mod KeyLen + 1,1))
CipherChar = Asc(Mid(Cipher$,I,1))
PlainChar = (CipherChar - KeyChar - PrevChar + 512) Mod 256
Plain$ = Plain$ + Chr(PlainChar)
PrevChar = CipherChar
Next
Return Plain$
End Function

Wenn ich dann ein Bild ver und wieder Entschlüsselt habe kann es von allen meinen Grafikprogrammen nicht mehr felesen werden. Könnt ihr mir helfen Question
  • Zuletzt bearbeitet von JimBobBalou am Fr, Mai 02, 2008 19:09, insgesamt einmal bearbeitet

Puccini

BeitragMo, Apr 28, 2008 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denk mal das liegt an der readline funktion!!!!

mach es doch so wie ich bei meinem packer:

zuerst ermittelst du die filegrösse mit filesize.

Diese Grösse schreibst du als erstes in die verschlüsselte datei als integer wert.
beim entschlüsseln liest du diesen integer wert aus und lässt eine for-schleife durchlaufen.

Also:
1. Filesize
2. File Byteweise einlesen (readbyte->writebyte)

das sind die befehle die du mal versuchen solltest Wink


Code: [AUSKLAPPEN]
Function PackFiles(file, path$)
dir = ReadDir(path$)
Repeat
   f$ = NextFile(dir)
   If f$ = "" Then Exit
   Select FileType(path$ + f$)
      Case 1
         file2 = ReadFile(path$ + f$)
         size = FileSize(path$ + f$)
         WriteString file, f$
         WriteInt file, size
         fileBank=CreateBank(size)
         ReadBytes(filebank,file2,0,size)
         WriteBytes(filebank,file,0,size)
         FreeBank filebank

         CloseFile file2
      Case 2
         If f$ <> "." And f$ <> ".." Then PackFiles(file, path$ + f$ + "\")
   End Select
Forever
CloseDir dir
End Function

hier ist es über banks gelöst.
das ist ein teil eines packers der alle dateien eines ordner in einer zusammen fast.

schau dir einfach mal readbyte und writebyte an! das sollte dir schon helfen Wink
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

Tankbuster

BeitragMo, Apr 28, 2008 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm... das liegt an WriteLine. Da wird jedesmal ein Return-Zeichen mitgeschrieben Wink
Mach es wirklich lieber mit Writebyte und veränder die einzelnen Bytes. Wink
Twitter
Download Jewel Snake!
Windows|Android

JimBobBalou

Betreff: Da sind fehler, obwohl da keine Fehler sind ;(

BeitragFr, Mai 02, 2008 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal Danke für die schnelle Antwort. Smile
Ich habe jetzt auch Functions geschrieben, aber ich komm irgendwie nicht weiter. Evil or Very Mad
Der Debugger sagt immer, dass EndIf fehlt, aber da ist doch überall EndIf, wo es sein muss. Oder Question
Code: [AUSKLAPPEN]
Function EncryptFile(name$,newname$,key$,deleteoldfile)
 size = FileSize(name$)
 readID = ReadFile name$
 writeID = WriteFile newname$
 WriteInt writeID,size
  For n = 0 To size
   currentbyte = ReadByte readID
   plain$ = Chr$(currentbyte)
   PlainLen = Len(Plain$)
   KeyLen = Len(Key$)
   PrevChar = 0
    For I = 1 To PlainLen
      KeyChar = Asc(Mid(Key$,(I-1) Mod KeyLen + 1,1))
      PlainChar = Asc(Mid(Plain$,I,1))
      CipherChar = (PlainChar + KeyChar + PrevChar) Mod 256
      Cipher$ = Cipher$ + Chr(CipherChar)
      PrevChar = CipherChar
    Next
   encryptedbyte = Asc(Cipher$)
   WriteByte writeID,encryptedbyte
  Next
 CloseFile readID
 CloseFile writeID
 If deleteoldfile=1 Then DeleteFile name
End Function

;-----------------------------------------------------------------

Function DecryptFile(name$,newname$,key$,writelog)
 readID = ReadFile name
 writeID = WriteFile newname$
 size = ReadInt readID
  For n = 0 To size
   currentbyte = ReadByte readID
   Cipher$ = Chr$(currentbyte)
    CipherLen = Len(Cipher$)
    KeyLen = Len(Key$)
    PrevChar = 0
     For I = 1 To CipherLen
      KeyChar = Asc(Mid(Key$,(I-1) Mod KeyLen + 1,1))
      CipherChar = Asc(Mid(Cipher$,I,1))
      PlainChar = (CipherChar - KeyChar - PrevChar + 512) Mod 256
      Plain$ = Plain$ + Chr(PlainChar)
      PrevChar = CipherChar
     Next
   decryptedbyte = Asc(Plain$)
   WriteByte writeID,decryptedbyte
   Next
 CloseFile readID
 CloseFile writeID
  If writelog=1 Then
   If FileType ("log.txt") = 0 Then
    tempID = WriteFile "log.txt"
    CloseFile tempID
   EndIf
  logID = OpenFile "log.txt"
   While Not Eof (logID)
    ReadLine$ logID
   Wend
   WriteLine$ logID,newname$
   CloseFile logID
  EndIf
End Function

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Mai 02, 2008 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
beim überfliegen von deinem Code ist mir das aufgefallen
Endif scheint richtig zu sein.

aber sowas geht nicht...

Code: [AUSKLAPPEN]
readID = ReadFile name$
 writeID = WriteFile newname$

Da fehlen die Klammern!
so ist es richtig :
Code: [AUSKLAPPEN]
readID = ReadFile (name$)
 writeID = WriteFile (newname$)


das hier ist auch falsch Code: [AUSKLAPPEN]
WriteLine$ logID,newname$

Das Dollarzeichen muß da weg, da die Writeline Function keinen Wert zurück liefert
[BB2D | BB3D | BB+]

JimBobBalou

BeitragFr, Mai 02, 2008 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Jetzt klaptt es.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group