Crypt-Modul

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

m a j o r

Betreff: Crypt-Modul

BeitragMo, Apr 17, 2006 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Sooo, hab vor längerer Zeit schon n bisschen mit Verschlüsselung

rumgespielt.
Rausgekommen is dieses simple Modul. Um direkt einmal

Missverständnissen vorzubeugen: Es dient keinesfalls dazu irgendwelche

hochsensible Regierungsdateien zu verschlüsseln... Wer so etwas in der

Richtung hiermit unternimmt, ist selber schuld ^^

Ich benutze es z.B. zum Verschlüsseln von Spielerdaten; nur der Spieler

mit dem richtigen Passwort kann drauf zugreifen, etc...
Z.z. ist es bei mir im Einsatz zur Datenübertragung(Server->Client).

Noch etwas vorweg: Ich habe keine Ahnung wie sicher diese

Verschlüsselung ist, für Rückantworten hierzu wäre ich dankbar Smile

Das Ganze funktioniert wie folgt(ich glaub so ein änhliches Prinziep

hab ich letztens noch bei den Projekten gesehen):

Teil 1:

Aus dem Passwort erstellen ich einen Hash-Array.

Dieser ist immer Byte[256] lang.

Teil 2:

Es gibt einen noch Array, Byte[256]. Dieser ist mit den Zahlen

Byte[0]=0 bis Byte[255]=255 gefüllt. Variationen hierbei sind durch das

laden eines Keyfiles möglich. Ein Keyfile ist 256 Byte groß und

behinhaltet alle Zahlen von 0 bis 255 in _zufälliger_ Reihenfolge, die

dann in diesen "Key-Array" eingelesen werden.

Teil 3:

Es existieren 2 Zähler.

Der Hash-Zähler und der Key-Zähler.

Dem Hash-Zähler ist die aktuelle Hash-Array Position bekannt.
Der Key-Zähler merkt sich die aktuelle Position im Key-Array.

Wenn nun ein Byte verschlüsselt wird passiert folgendes:


Der Hash-Zähler wird um 1 erhöht.
Anschließend folgt ein MOD 256.

Der Key-Zähler wird um den Wert von Hash[ hash-zähler ] erhöht.
Anschließend folgt ein MOD 256.

Das Byte wird nun mit key[ key-zähler ] XOR verknüpft.




Das Ganze kann man wie einen Stream beschreiben etc...
Es folgen ein Beispiel(es liegen 5 dem Modul bei, eins hab ich allerdings ausversehen in English kommentiert Wink)


Code: [AUSKLAPPEN]


'##########################

'   Methode 1

'##########################


   Import pub.crypt
   
   
   
   Local file:TCryptStream
   
   file=New TCryptStream
   
   file.SetStream(WriteFile("test.txt"))
   
   file.crypt.SetPassword("lol")

   
   file.WriteLine("lol sagte er da ^^")
   
   file.close()
   

'####################################################


   
   
   file=New TCryptStream
   
   file.SetStream(ReadFile("test.txt"))
   
   file.crypt.SetPassword("lol")
   
   
   Print file.ReadLine()
   
   file.close()









Code: [AUSKLAPPEN]

   -> TCryptStream
   
        Method   SetStream( stream:Tstream )
                Setzt den Stream, der Verschlüsselt werden soll.

   Method   SetCrypt ( newcrypt:TCrypt ) 
      Setzt den Crypter (kA wie das heißt ^^) von dem Stream
auf newcrypt.

   Field   crypt:TCrypt
      Siehe TCrypt

   
   -> TCrypt

   Method Reset()

      Setzt die beiden Zähler zurück auf 0.


   Method SetPassword:Int(pwd:String,kfile:String="")

      Setzt das Passwort auf pwd und lädt (optional, aber

dringend empfohlen) ein KeyFile mit der url$=kfile


   Method Encrypt:Byte(wert:Byte)
      
      Verschlüsselt das Byte wert.





Sooo, und eh ihr mir an die Gurgel geht, hier der Link Very Happy


Edit: siehe weiter unten
  • Zuletzt bearbeitet von m a j o r am Di, Apr 25, 2006 16:57, insgesamt 2-mal bearbeitet

Hummelpups

BeitragMo, Apr 17, 2006 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, warum direkt den Stream crypten?
Wäre es nicht hilfreicher gewesen im Beispiel einen einfachen String
über ein paar mechanismen zu crypten und diese
dann manuell zu schreiben?

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

m a j o r

BeitragDi, Apr 18, 2006 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Jain

du kannst ja, wie in einem Beispiel zu sehen, auch einzelne Bytes crypten.. mal ein Beispiel:

Code: [AUSKLAPPEN]

Local cr:TCrypt
Local text:String,result:String
Local i:Int

cr = TCrypt.Create()
cr.SetPassword("LOL")

text=Input("Text:")

For i=0 to text.length-1
result:+Chr$(cr.encrypt(text[i]))

Next

Print result





Der Stream ist dazu gedacht, wesentlich einfacher ganze Dateien zu verschlüsseln(natürlich welche die merh als 1 Satz enthalten).
 

m a j o r

BeitragDi, Apr 25, 2006 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Sooo neue Version ist da..

Enthält ein paar neue Funktionen, z.B. EncryptString$()...

Außerdem n paar neue Beispiele. Die Beispiele müssen nun seperat geladen werden...

Außerdem ein paar Fehler behoben.. nix Relevantes aber immerhin ^^

Crypt-mod 1.1
Beispiele

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group