Einfaches Verschlüsseln für jederman

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

Suco-X

Betreff: Einfaches Verschlüsseln für jederman

BeitragMo, Mai 17, 2004 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute. Da sich die Fragen dazu im Forum ziemlich häufen erzähle ich euch Heute mal was zum Thema Verschlüsselung eurer Spieldaten wie Grafiken, Sounds etc.

Also gut. Her mit dem Code!!

Immer mit der Ruhe Junger Jedi. Ich denke es ist wichtig das als erstes mal das wie und warum klar ist. Es ist eigentlich eine ganz logische und runde Sache, also schaue
dir den nächsten Punkt an.

Ok, überredet

Gut gut. Aller Anfang ist für uns das allseits beliebte Byte. Egal ob eine Bild Datei, Film Datei, Sound Datei, alle bestehen aus einzelnen Bytes. Das sind die komischen Zeichen
die ihr seht wen ihr z.b. euch ein Bild mal im Text Editor betrachtet. Auch Text Zeichen sind Bytes. Also einfach jedes Zeichen in einer Datei egal wie es nun aussieht ist ein
Byte. Das bringt uns unserem Ziel schön näher .Wie können wir nun eine Datei Verschlüsseln?
Das ist eine recht einfache Sache. Im eigentlichen hat jedes Format einen strengen aufbau. Erst der Header, dann die Daten. So wird z.b. ein Bild in ein Grafik Programm geladen.
Stimmen diese Bytes nicht, ist die Datei nicht mehr brauchbar und kann von keinem Programm mehr geladen werden. Na, schon eine Idee?? Richtig, wir müssen irgendwie
diese Bytes aus der Datei verändern, dann ist sie nicht mehr brauchbar für andere Leute, den nur "Wir" wissen wie genau wir diese Bytes verändert haben.


Hört sich gut an, und wie jetzt genau?

Jede Programmiersprache, auch Blitzbasic, hat Befehle für den Zugriff auf Dateien . Das wären z.b. ReadFile, WriteFile, OpenFile,ReadByte,WriteByte,ReadInt etc.
Nachzulesen wie immer in der besten BlitzBasic Hilfe www.blitzbase.de !
Ich werde hier gleich zwei Funktionen anbieten. Einmal zur Verschlüsselung, und einmal zur Entschlüsselung. Bevor ihr als euer Spiel veröffentlichen wollt Verschlüsselt
ihr alle Dateien die ihr mitliefert. Der Benutzer erhält also Lauter Kaputte Dateien die er sich nicht anschauen kann . Aber wen er das Spiel startet werden die Dateien kurz Entschlüsselt,
von BlitzBasic eingelesen, und wieder Verschlüsselt. Das geht so schnell das auch in dieser kurzen Zeit keiner die entschlüsselten Dateien schnell Kopieren kann. Es sei den
dieser jemand verfügt über Reflexe im Nano sekunden Berreich Wink Und der Clou ist ja, BlitzBasic Lädt die Entschlüsselten Dateien und somit die Korrekten Daten.

Das habe ich jetzt soweit verstanden. Nun rede endlich mal Tacheles!!

Fangen wir also an. Als erstes die zwei Versprochenen Funktionen. Ich werde unten darauf eingehen.

Code: [AUSKLAPPEN]

;Zum Verschlüsseln, also Zerstören gedacht.
Function VerschluesselDatei(filename$, key)

If FileType(filename) = 0
   Return 0
EndIf

Local f_size = FileSize(filename)
Local byte_bank = CreateBank(f_size)
Local datei = OpenFile(filename)
Local temp_byte



ReadBytes(byte_bank,datei,0,f_size)

For i = 0 To f_size
   temp_byte = PeekByte(byte_bank,i)
   temp_byte = temp_byte+key
   PokeByte(byte_bank,i,temp_byte)
Next

SeekFile(datei,0)

WriteBytes(byte_bank,datei,0,f_size)

CloseFile(datei)

FreeBank(byte_bank)

End Function


; Stellt die Daten wieder her
Function EntschluesselDatei(filename$, key)

If FileType(filename) = 0
   Return 0
EndIf

Local f_size = FileSize(filename)
Local byte_bank = CreateBank(f_size)
Local datei = OpenFile(filename)
Local temp_byte

ReadBytes(byte_bank,datei,0,f_size)

For i = 0 To f_size
   temp_byte = PeekByte(byte_bank,i)
   temp_byte = temp_byte-key
   PokeByte(byte_bank,i,temp_byte)
Next

SeekFile(datei,0)

WriteBytes(byte_bank,datei,0,f_size)

CloseFile(datei)

FreeBank(byte_bank)

End Function


Recht wenig Code. Es ist auch eine einfache Verschlüsselung. Die beiden Functionen sind vom Code her "fast" gleich. Beim Verschlüsseln addieren wir jedem Byte einen Wert,
beim Entschlüsseln das Gegenteil. Zum Aufbau der Functionen von oben nach Unten weg .

1 : Wir Checken ob die Datei exestiert siehe FileType. Wen sie nicht vorhanden ist wird die Function verlassen.
2: Wir ermitteln die Datei größe. Mit dieser Größe erstellen wir eine Bank(Speicherberreich Reservieren). Unsere Bank ist also genau so groß wie die Datei .
Wichtig ist also das ihr da jetzt keine 300 MB Datei durchjagt, diese Funktionen sind für normale Spiel Dateien von 0-20 MB gedacht.
3 : Wir öffnen die Datei mit OpenFile. OpenFile aus dem Grund da wir erst in der Datei lesen und dann schreiben . OpenFile unterstützt das im gegensatz zu WriteFile oder
ReadFile.
4 : Mit dem Befehl ReadBytes laden wir alle Bytes aus der Datei in die Bank.
5 : Wir Peeken(Nehmen) nach der reihe alle bytes aus der Bank und Fügen/Entfernen diesem den Wert von Key.
6: Wieder an den Anfang der Datei mit seekfile.
7: Wir schreiben die in der Bank veränderten Bytes wieder in die gleiche Datei. Somit ist die Datei unbrauchbar.
8 : Datei schließen, Bank wieder löchen da wir sie nur zum zwischenspeichern brauchten.

Das war es auch schon. Ich denke ihr solltet den Sinn jetzt verstanden haben. Die verschlüsselung ist natürlich noch sehr Plump ,aber ich denke wer das Prinzip dahinter
verstanden hat wird seine eigenen Ideen zur Sicherren Verschlüsselung einbringen können. Ansonsten reichen diese Functionen aus um 98% der benutzer den Inhalt
der Dateien außerhalb deines Spiels zu verwähren.


Ihr solltet aber noch die folgenden Dinge lesen bevor ihr damit loslegt, Wichtig. Den die ganze Sache ist mit etwas Vorsicht zu genießen.

Achte ob du die Datei schon verschlüsselt hast oder nicht . Die Functionen finden nicht Automatisch raus ob die Datei schon Verschlüsselt ist oder nicht.
Wen er also ausversehen zweimal hintereinander Verschlüsselt müsst ihr auch wieder zweimal Entschlüsseln . Um das zu vermeidne einfach Ordnung berreiten.
Hier ein kleines Beispiel wie ihr es ohne Probleme verwenden könnt.

1 : Spiel fertig machen.
2 : Kleines Programm machen mit dem du alle Dateien die dein Game beinhaltet Verschlüssellst. Also die Verschlüssel Function nehmen und eine Datei nach dem anderen Verschlüsseln .
3 : In deinem Game wirst du diese Dateien Laden wollen. Der Aufbau sollte wie folgt von Statten gehen :
-> Dateien Entschlüsseln mit der Function
-> Dateien Laden mit LoadImage/LoadMesh etc.
-> Dateien wieder Verschlüsseln.
-> Geiles Hauptspiel.
Fertig.

Code: [AUSKLAPPEN]
EntschluesselDatei("boden32.jpg",200)

image = LoadImage("boden32.jpg")

VerschluesselDatei("boden32.jpg",200)

Und wie gesagt, Datei muss bei diesem Beispiel z.b. schon Verschlüsselt sein.

UND WICHTIG. Passt auf den Key auf den ihr angeben könnt. Der muss übereinstimmen beim entschlüsseln/verschlüsseln.
Also bei VerschluesselDatei("xyz.bmp",222) müsst ihr auch wieder EntschluesselDatei("xyz.bmp",222)

Falls ihr Probleme habt oder anmerkungen die nicht aus Langeweile entstanden sind, einfach hier Posten, aber nicht anfangen hier Rumzushakern!!!

Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Smily

BeitragMi, Mai 04, 2005 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Mann muss aber darauf achten, dass der Key nicht größer wird als
255-Dem größten byte aus der Datei.
Weil man sonst auf einen Wert über 255 kommt.

Suco-X

Betreff: ...........

BeitragMi, Mai 04, 2005 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Versteh nicht ganz was du meinst. Wenn einer Byte Var ein Wert über 255 zugewiesen wird, fängt es wieder von 0 an. Demnach ist es egal wie groß der Wert im Key ist.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

sen-me

BeitragSa, Sep 10, 2005 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
da is abe rnen fehler drin
bei mir kommt nen fehler "Out of range" oda so
und zwar musst du bei der For schleife so schreiben (bei verschluss und entschluss)
BlitzBasic: [AUSKLAPPEN]
For i = 0 To f_size-1
 

nobody

BeitragFr, Sep 30, 2005 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wäre es nicht sicherer die entschlüsselte Bank als Return Wert wiederzugeben, anstatt die Datei wieder zu reparieren?

Kennt ihr noch ein wenig aufwendigere Verschlüsselungen oder ist da Kreativität gefragt?

Benibaerenstark

BeitragSa, Okt 01, 2005 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Suco,

ein wirklich gutes Tutorial! Gratuliere

@nobody, klar ist diese verschlüsselung recht einfach, es gibt ja "nur" 256 möglichkeiten, doch wenn du den Key durch ein Muster ersetzt, also bei Byte1 addiere 10 bei Byte2 addiere 2 bei Byte3 addiere 5 und dann wieder von vorne...sei kreativ.
Natürlich wäre direkt aus der Bank sicherer, aber so kannst du die Blitz-befehle wie immer gebrauchen (Mesh laden usw). Bin mir nicht sicher, ob blitz die dateien auch aus ner Bank ohne Probleme lesen würde...

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group