Dateien ver/entschlüsseln?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

dubitat

Betreff: Dateien ver/entschlüsseln?

BeitragSo, März 28, 2004 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
weiß jemand wie ich sinnvoll datein verschlüssel/entschlüssel, weil ich es immer ziemlich doof finde, wenn der user in deine dat dateien geht und dann ändert er mal eben das level! deswegen bräuchte ich etwas das die dateien verschlüsselt/entschlüsselt, ohne die dateien temporär auszulagern! also datei öffnen, in bb entschlüsseln, laden.
das bedeutet, das bb das im speicher laden soll und nicht irgendwo auf der festplatte!
Erare humanum est - Irren ist Menschlich
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi! Ich ahb genau das was du brauchst: (hier werden bilder verschlüsselt und entshclüsselt)

Code: [AUSKLAPPEN]

Global FileName$ = "me.jpg" ; direkt nach dem entschlüsseln wieder verschlüsseln
                                 ; entschlüsseln, laden , verschlüsseln !!!!
Global fileName2$ = "me2.jpg"

; Verschlüsseln
datei = OpenFile(FileName)
bank = CreateBank(FileSize(FileName)+2)
For i = 0 To FileSize(FileName)
PokeByte(bank,i, ReadByte(datei)-100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei


; Verschlüsseln
datei = OpenFile(FileName2)
bank = CreateBank(FileSize(FileName2)+2)
For i = 0 To FileSize(FileName2)
PokeByte(bank,i, ReadByte(datei)-100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName2)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei


damit hast du die bilder verschlüsselt! nun musst du sie in deinem spiel erst entschlüsseln, die sachn in den speicher laden, und direkt vershclüsseln , das ist ganz wichitg!!!
Code: [AUSKLAPPEN]

;entschlüsseln
datei = OpenFile(FileName2)
bank = CreateBank(FileSize(FileName2)+2)
For i = 0 To FileSize(FileName2)
PokeByte(bank,i, ReadByte(datei)+100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName2)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei


;entschlüsseln
datei = OpenFile(FileName)
bank = CreateBank(FileSize(FileName)+2)
For i = 0 To FileSize(FileName)
PokeByte(bank,i, ReadByte(datei)+100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei


bild1 = LoadImage("me.jpg")
bild2 = LoadImage("me2.jpg")


; Verschlüsseln
datei = OpenFile(FileName2)
bank = CreateBank(FileSize(FileName2)+2)
For i = 0 To FileSize(FileName2)
PokeByte(bank,i, ReadByte(datei)-100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName2)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei

; Verschlüsseln
datei = OpenFile(FileName)
bank = CreateBank(FileSize(FileName)+2)
For i = 0 To FileSize(FileName)
PokeByte(bank,i, ReadByte(datei)-100)
Next
SeekFile(datei,0)
For i = 0 To FileSize(FileName)
WriteByte(datei, PeekByte(bank,i))
Next
CloseFile datei



So, bitte - danke Smile
~ Hey Ho Let's Go ~

Suco-X

Betreff: .......

BeitragSo, März 28, 2004 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@BlitzKrieg : Wen du schon meinen Code nimmst dann bitte richtig. Einmal Verschlüsseln und einmal entschlüsseln reicht. Das doppelt zu machen ist totaler schwachsinn und eine noch größere geschwindigkeitsbremse. Außerdem war das nur ein Beispiel zum zeigen wie sowas funktioniert, es geht weitaus Praktischer, das zwischenspeichern in der Bank kann man sich sparen...
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW! Sorry Suco, aber dann weißt du ja mit wem du damals gechattet hast! Laughing stimmt, ich hätte dich eventuell auch fragen sollen! Tut mir Leid, aber da kannst du mal sehen, wieviel hängen geblieben ist!!!
Razz Wink
~ Hey Ho Let's Go ~
 

dubitat

BeitragSo, März 28, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hey jungs vielen dank!

@ sucox wie würdest du das denn machen? wahrscheinlich mit einem dim und einer for i = ... schleife oder? dann spart man sich viel code arbeit! und was ich noch gerne wissen wollte ist, wie sicher das denn nun ist Razz

[edit] und so geht das jetzt also mit jeder beliebigen datei(zb. mp3/dat/...) oder?[/edit]
Erare humanum est - Irren ist Menschlich
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, das müsste mit jedem datei typen gehn
~ Hey Ho Let's Go ~
 

dubitat

BeitragSo, März 28, 2004 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
und was für eine endung hat die verschlüsselte datei?



P.S: Wie lange braucht der bitte um die datei zu verschlüsseln? mehr als 5 min oder weniger?
Erare humanum est - Irren ist Menschlich

Travis

BeitragSo, März 28, 2004 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
*lol* der Dateiname wird doch überhaupt nicht verändert. Und die Zeit wird sich nach der Dateigröße richten und garantiert im ms bereich liegen und nicht in Minuten. Rolling Eyes
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

dubitat

BeitragSo, März 28, 2004 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
dann verstehe ich nicht, warum das programm sich bei mir nicht beendet!
Erare humanum est - Irren ist Menschlich

Travis

BeitragSo, März 28, 2004 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Man sollte das ganze wohl nur für sehr kleine Dateien benutzen, da das Programm sonst abstürzt. Eine 6KB-Datei hat bei mir etwa 1000ms gedauert.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Suco-X

Betreff: .......

BeitragMo, März 29, 2004 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem daran ist wie schon festgestellt wurde, es ist so nur für kleine Dateien wie Bilddateien und sowas gedacht und speichert die Daten noch in einer Bank zwischen. Es geht aber auch wen man einen byte ausliest, mit SeekFile von der aktuellen position 1 zurückgeht und den byte mit einem Wert addiert wieder hinschreibt. Desweiteren reicht es wen man nur jeden 2-5 Byte ausliest und schreibt. Um missverständnisse zu umgehen sollte man am Ende einer verschlüsselten Datei auch noch eine erkennungs ID schreiben. In den Ver und Entschlüssel funktionen wird am Anfang dann erst nach dieser ID am ende der Datei gesucht und wen sie nicht da ist, ist die Datei nicht verschlüsselt, wen sie da ist, ist sie verschlüsselt. Jeder sollte aber selbst rausfinden wie es am besten geht.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

dubitat

BeitragMo, März 29, 2004 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
sagmal bei deiner sache ist das ja so, das die datein für eine gewisse zeit sichtbar sind(auch wenn es nur millisec() sind)

kann man das nicht irgendwie so machen, das man eine verschlüsselte datei einliest und entschlüsselt in bb(ohne irgendeinen wert abzuspeichern) und dann die datei irgendwie aus der bank/array rausholt ohne sie in einer datei zu speichern! so zb.:

Code: [AUSKLAPPEN]

dim entschlüsselt(filesize(datei))

;dim fillen!

loadimage(entschlüsselt)



so würde ich es am liebsten machen! was sagt ihr dazu?


[edit] deswegen hat der bei meinem bild so lange gebraucht! [edit]

es reicht doch auch schon wenn man die ersten 10 bytes oder so ändert oder? dann braucht man nur wenig zu berechnen mit dem programm und erzielt den selben verschlüsselungs effekt oder liege ich da jetzt falsch?
Erare humanum est - Irren ist Menschlich
 

dubitat

BeitragDi, März 30, 2004 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry wegen doppelpost aber arcanes hat mir gestern auf die sprünge geholfen und deswegen hab ich das jetzt hinbekommen! danke noch mal an dich Very Happy ! naja vielleicht stell ich das in das code archiv, damit sich das leute die schon immer ihre bilder in eine datei packen wollten reinziehen können!

P.S. Ich glaube eine dattei wäre vom handling her bequemer und man kann es nachher so machen, das jedes bild einzeln abgespeichert wird(nachdem alle ausgelesen wurden) gut zb. wäre, wenn man ein ladebalken einbauet, weil 2,6mb doch ca. 2 sec dauert!
Erare humanum est - Irren ist Menschlich

Travis

BeitragMi, März 31, 2004 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Suco-X

Deine Idee ist echt gut. Ich habe sie mal versucht sie umzusetzen, aber es wird offenbar nur der Anfang der Datei verändert. Genauer gesagt nur das erste Byte Rolling Eyes

Code: [AUSKLAPPEN]

Start = MilliSecs()
Crypt("Planet.bmp", 21)
Print "Zeit: " + (MilliSecs()-Start)
WaitKey
End



Function Crypt(File$, Key)

 Datei = OpenFile(File$)

 If Datei = 0 Then RuntimeError("Zu verschlüsselnde Datei ungültig")

 While Not Eof(Datei)
  Wert = ReadByte(Datei)
  SeekFile Datei, FilePos(Datei)-1
  WriteByte Datei, Wert + Key
 Wend

 CloseFile Datei

End Function


Function Decrypt(File$, Key)

 Datei = OpenFile(File$)

 If Datei = 0 Then RuntimeError("Zu entschlüsselnde Datei ungültig")

 While Not Eof(Datei)
  Wert = ReadByte(Datei)
  SeekFile Datei, FilePos(Datei)-1
  WriteByte Datei, Wert - Key
 Wend

 CloseFile Datei

End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Suco-X

Betreff: ......

BeitragMi, März 31, 2004 4:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei dieser Methode ist es wohl besser das mit einer For..Next schleife zu machen. War gewißermasen auch keine Idee, hatte vor Wochen schon die Lösung dazu in Code umgesetzt. Jedoch habe ich mich hirbei entschlossen immer 4 bytes zu Laden und zu Schreiben. Vielleicht kannst du es ja gebrauchen.

Code: [AUSKLAPPEN]

Function Entschlüssel(FileName$)
Local datei = OpenFile(FileName)
Local checkint, temp_byte

SeekFile(Datei,FileSize(FileName)-4)
checkint = ReadInt(Datei)

If checkint <> 992399
   RuntimeError("Datei ist nicht verschlüsselt")
   Return 0
EndIf
SeekFile(Datei,0)

For i = 0 To FileSize(FileName)
   temp_byte = ReadInt(datei)
   temp_byte = temp_byte-(65000+(i*3))
   SeekFile(Datei, FilePos(datei)-4)
   WriteInt datei, temp_byte
   SeekFile(Datei, FilePos(datei)+4)

   If Eof(datei)
      Exit
   EndIf
Next

SeekFile(Datei,FileSize(FileName)-4)
WriteInt(datei,0)
CloseFile(datei)

End Function



Function Verschlüssel(FileName$)
Local datei = OpenFile(FileName)
Local checkint, temp_byte

SeekFile(Datei,FileSize(FileName)-4)
checkint = ReadInt(Datei)
If checkint = 992399
RuntimeError("Datei ist bereits verschlüsselt")
Return 0
EndIf
SeekFile(Datei,0)

For i = 0 To FileSize(FileName)
   temp_byte = ReadInt(datei)
   temp_byte = temp_byte+(65000+(i*3))
   SeekFile(Datei, FilePos(datei)-4)
   WriteInt datei, temp_byte
   SeekFile(Datei, FilePos(datei)+4)

   If Eof(datei)
      Exit
   EndIf

Next

WriteInt(datei,992399)
CloseFile(datei)

End Function



Geht mit allen Dateien. Habs mal mit ner einfachen Textdatei getestet wo paar namen stehen. Ist danach nicht mehr wieder zu erkennen und das Entschlüsseln klappt auch wunderbar. Dazu wird noch gecheckt ob eine Datei verschlüsselt ist oder nicht.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Travis

BeitragMi, März 31, 2004 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, danke! Das hart mir weitergeholfen. Jetzt habe ich mein's so abgeändert, das es auch funktioniert. Übrigens 'ne gute Idee, die Verschlüsselung von der aktuellen Dateiposition abhängig zu machen 8)

Es gibt aber ein kleines Problem mit den Prüfbytes. Die Prüfbytes am Dateiende werden zwar beim entschlüsseln auf Null gesetzt, sind aber immer noch vorhanden. Damit ist die Datei verändert. Kann man die letzten Bytes nicht irgendwie komplett entfernen?
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

dubitat

BeitragMi, März 31, 2004 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst doch sicher die dateilength setzen oder? naja wenn nicht dann löscht du beim entschlüsseln einfach die vorhandene datei, nachdem du sie ausgelsenen hast und schreibst die bytes in eine neue...
Erare humanum est - Irren ist Menschlich

Suco-X

Betreff: .........

BeitragMi, März 31, 2004 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@Travis : Ja, das am ende nochwas hängen bleibt ist mir da auch schon aufgefallen. Bei den meisten Dateien auch nicht schlim da bei z.b. Bildern und meshs sowieso diese bytes nicht eingeladen werden. Wollte dieses Prob aber demjenigen überlassen der Lust hat diese Routine zu nutzen und weiter zu entwickeln. Habe für BB im mom sehr wenig Zeit.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group