Einfaches Verschlüsseln für jederman
Übersicht BlitzBasic FAQ und Tutorials
Suco-XBetreff: Einfaches Verschlüsseln für jederman |
Mo, Mai 17, 2004 10:04 Antworten mit Zitat |
|
---|---|---|
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 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 |
Mi, Mai 04, 2005 18:04 Antworten mit Zitat |
|
---|---|---|
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-XBetreff: ........... |
Mi, Mai 04, 2005 19:36 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Sep 10, 2005 15:13 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Sep 30, 2005 21:01 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Okt 01, 2005 10:26 Antworten mit Zitat |
|
---|---|---|
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 |
Übersicht BlitzBasic FAQ und Tutorials
Powered by phpBB © 2001 - 2006, phpBB Group