Dateien schützen
Übersicht

![]() |
hamZtaAdministratorBetreff: Dateien schützen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, dies ist mein erstes Tutorial, ich hoffe es ist verständlich!
Es geht um die Sicherung von Dateien bei Spielen, zB wenn man seine Bilder vor Bilddieben schützen will. Es gibt viele Streitigkeiten, welche Methode man benutzen soll, oder ob man sich ein eigenes Grafikformat machen soll... In diesem Tutorial werden ich über die Verschlüsseln - Entschlüsseln - Laden - Löschen Methode sprechen, die sehr brauchbar ist. Erklärung: Die Bilder (oder andere Dateien) werden zuerst verschlüsselt. Dann, beim Programmstart, werden die Dateien entschlüsselt, und ganz normal geladen (zB mit Loadimage()). Nach dem Laden werden sie sofort wieder gelöscht, damit keiner an die Dateien gelangt. Einige behaupten, dass, wenn man schnell genug ist, man die Dateien während dem Laden klauen kann. Wer wirklich so schnell ist, der bekommt von mir einen Keks! (ihr könnt es gerne mal ausprobieren, es wird nicht klappen ![]() So nun zum Code selbst: Ich habe hier nicht den kompletten Code geschrieben der nötig ist und alle Bilder zu laden & zu löschen, sondern ich habe die Funktionen zum Verschlüsseln und Entschlüsseln programmiert. (Sollte ein kleiner Tritt zum Weitercoden sein ![]() Zuerst alle Variablen die benötigt werden:Code: [AUSKLAPPEN] Global inputFile$ Global Endung$ = "cbm" ;Die Endung, die die verschluesselte Datei haben soll Dim key(5) ;Der Schluessel der zum Verschluesseln benutzt wird key(0)=65 ;Der Key wird gefuellt... key(1)=128 ;... key(2)=35 ;... key(3)=12 ;... key(4)=134 ;... key(5)=23 ;... Als Endung könnt ihr eine beliebe Dateiendung wählen. Als Verschlüsselungsmethode benutze ich einen 6fach Key, in diesem Fall 65-128-35-12-134-23. Hier kann jeder seine eigenen Zahlen wählen. Mehr dazu später. Hier die Funktion zum Verschlüsseln der Datei: Code: [AUSKLAPPEN] Function codeFile(file$) ;Die Verschluessel-Funktion Local inputStream Local outputStream Local outputFile$ Local cByte Local oldEndung$ Local keyPos If FileType(file$) = 0 Then RuntimeError "Datei nicht gefunden!" ;Fehlerueberpruefung inputStream = ReadFile(file$) ;Den inputStream öffnen oldEndung$ = Right(file$,3) ;Originale Endung auslesen outputFile$ = Left(file$,Len(file)-3) + Endung$ ;Die Endung der outputFile$ ändern outputStream = WriteFile(outputFile$) WriteString outputStream, file$ ;Originalen Pfad in die Datei schreiben While Eof(inputStream) = 0 ;Alle Bytes der Bild-Datei durchgehen cByte = ReadByte(inputStream) ;und einzeln in cByte einlesen cByte = cByte Xor key(keyPos) ;Jetzt das Byte mit dem Key an der aktuellen keyPos = keyPos + 1 ;Stelle(keypos) verschluesseln, keyPos um eins erhoehen If keyPos > 5 Then keyPos = 0 ;Wenn keyPos > 5 dann setze keyPos = 0 WriteByte outputStream, cByte ;Schreib das verschluesselte Byte in die outputFile Wend CloseFile inputStream ;Schließ die Streams wieder CloseFile outputStream ;sonst kommt es zu Fehlern End Function Die meisten Stellen sind auskommentiert, deshalb sage ich hier nicht mehr viel dazu. Es wird zusätzlich zu den Bytes am Anfang der originale Dateipfad als String geschrieben. Diese wird für den Entschlüsslungscode benötigt. ich möchte nur die verschlüsselung erklären, da die vielleicht unverständlich wirkt: Code: [AUSKLAPPEN] Bytes | XOR Key 10 65 23 128 43 35 255 12 86 134 32 23 54 65 65 128 76 35 ... ... Bytes in der Datei sind irgendwelche Bytes die in der Datei eben vorkommen, zB in Bilddateien. Darunter stehen die Werte, mit denen das Byte mittels XOR vershlüsselt wird. (Man erkennt nun, was es mit dem Key auf sich hat: 65-128-35-12-134-23). Hier noch die Funktion zum Entschlüsseln: Code: [AUSKLAPPEN] Function decodeFile(file$) Local inputStream Local outputStream Local outputFile$ Local cByte Local oldEndung$ Local keyPos If FileType(file$) = 0 Then RuntimeError "Datei nicht gefunden!" ;Fehlerueberpruefung inputStream = ReadFile(file$) ;Verschluesselte Datei oeffnen outputFile$ = ReadString(inputStream) ;Den originalen pfad der Datei auslesen outputStream = WriteFile(outputFile$) ;Die neue Datei speichern While Eof(inputStream) = 0 ;Alle Bytes cByte = ReadByte(inputStream) ;auslesen cByte = cByte Xor Key(keyPos) ;und Verschluesseln, wie oben keyPos = keyPos + 1 ;Keypos erhoehen If keyPos > 5 Then keyPos = 0 ;und Ueberpruefen. WriteByte outputStream, cByte ;Byte letztendlich in die Datei schreiben Wend CloseFile inputStream CloseFile outputStream End Function Funktioniert im Prinzip genau gleich wie oben. Hier wird der Dateipfad ausgelesen. (somit kann man alle Dateien verschlüsseln, da die Dateiendung erhalten bleibt) Um das ganze in ein Spiel einzubauen, muss eine List mit Dateien erstellt werden (array) und die dann alle verschlüsselt werden. Am Start des Programms müssen alle Dateien entschlüsselt werden, dann geladen werden und dann gelöscht werden. dies zu coden, ist aber nicht wirklich anspruchsvoll ![]() [UPDATE] Ich habe mich entschlossen, das ganze zu vervollständigen, und zu zeigen wie man ne Filelist verwendet: Code: [AUSKLAPPEN] Dim files$(99) Global fileCount = -1 Global listStream = ReadFile("gfx/imglist.lst") While Not Eof(listStream) fileCount = fileCount + 1 files(fileCount) = ReadLine(listStream) Wend CloseFile listStream Es wird ein Stringarray benötigt, das genügend Platz für mehrere Dateien bietet. fileCount fungiert als "Pointer" der zeigt, wo wir gerade im array sind. Es wird eine simple Textdatei eingelesen die zb folgenden Inhalt hat:Code: [AUSKLAPPEN] gfx/tiles/tiles.bmp gfx/shoot.bmp ... Die Dateinamen einfach durch einen Zeilenumbruch getrennt hineinschreiben. Man beachte, das man den Pfad immer von der Codedatei oder dem Programm ausgehend schreiben muss, und nicht von der Textdatei. Nun geht man zum Verschlüsseln alle Bilder durch:Code: [AUSKLAPPEN] For i = 0 To fileCount If FileType(files(i)) = 1 Then codeFile(files(i)) ;Und die Crypt-Function aufrufen Next Es wird überprüft ob die Datei existiert, damit keine Probleme entstehen wenn eine Datei schon verschlüsselt ist oder nicht. Zum Entschlüsseln:Code: [AUSKLAPPEN] For i = 0 To fileCount tmpFile$ = Left(files(i),Len(files(i))-3) + Endung$ If FileType(tmpFile$) = 1 Then decodeFile(tmpFile$) ;Und die deCrypt-Function aufrufen Next Hier muss die andere Endung angehängt werden, da wir die Dateien in der Textdatei mit ihrer wirklichen Endung angegeben haben. zum Löschen der Dateien reicht ein simples:Code: [AUSKLAPPEN] For i = 0 To fileCount DeleteFile files(i) Next So, nun erkläre ich den Einsatz dieser Codes:Code: [AUSKLAPPEN] ;Mein tolles Spiel For i = 0 To fileCount tmpFile$ = Left(files(i),Len(files(i))-3) + Endung$ If FileType(tmpFile$) = 1 Then decodeFile(tmpFile$) ;Und die deCrypt-Function aufrufen Next Graphics 800,600,32,1 setbuffer backbuffer() global spieler = Loadimage("spieler.bmp") global ente = Loadimage("ente.bmp") ... ... For i = 0 To fileCount DeleteFile files(i) Next repeat ... ... until keyhit(1) Also: 1. Dateien entschlüsseln 2. Dateien laden 3. Dateien löschen Natürlich müssen die Dateien vorher verschlüsselt werden. ich hoffe ich konnte hier wem helfen! sollten fragen auftauchen, dann einfach hier rein damit! hamZta |
||
Blog. |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
~AUFSPALTUNG~ Keine Diskussionen im FAQ Bereich... ![]() https://www.blitzforum.de/foru...hp?t=21279 cheers |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group