Seite 1 von 1

Textverschlüsselung mit RC4 und Base64

Verfasst: 26.12.2006 23:10
von Frogger
Ist nichts wildes aber ich dachte mir der ein oder andere kanns mal gebrauchen :)

Es ist eine Kombination aus RC4 und Base64 Verschlüsselung.
Man kann es benutzen um z.B. Passwörter oder Logindaten für FTP-Server in Preference-Dateien zu speichern.
Oder einfach alles was man als String einlesen will, das aber verschlüsselt sein muss.

Bei mir funktioniert es wunderbar und bei entsprechend langem Key
ist es fast(!) unmöglich an die Daten heranzukommen.
Denn Base64 alleine ist keine große herausforderung.


Code: Alles auswählen

Procedure.l RC4Mem(Mem.l, memLen.l, key.s) ;rückgabe = adresse des vrschlüsselten speichers
  ; RC4 Verschlüsselung >30MB/s
  Protected i.l, t.l, x.l, j.l, temp.l, y.l, l.l, *Sp.Long, *KeyP.Byte, *Memm.Byte
  If key <> ""
    Dim S.l(255)
    Dim K.l(255)
    i=0: j=0: t=0: x=0
    temp=0: y=0
    j = 1
    l.l          =Len(key)
    *Sp      = @S()
    *KeyP    = @key
    For i = 0 To 255
      *Sp\l = i
      *Sp + 4
      If *KeyP\b = 0
        *KeyP = @key
      EndIf
      K(i) = *KeyP\b
      *KeyP+1
    Next i
    j = 0
    For i = 0 To 255
      j = (j + S(i) + K(i)) & 255
      temp = S(i)
      S(i) = S(j)
      S(j) = temp
    Next i
    i = 0
    j = 0
    *Memm = Mem
    For x = 0 To memLen-1
      i = (i+1) & 255
      j = (j + S(i)) & 255
      temp = S(i)
      S(i) = S(j)
      S(j) = temp
      t = (S(i) + (S(j) & 255)) & 255
      y = S(t)
      *Memm\b ! y
      *Memm + 1
    Next
    ProcedureReturn Mem
  EndIf
  ProcedureReturn 0
EndProcedure 

Procedure.s MyCodeString(string.s, key.s)
  Protected strlen.l, enc.s, *codetmem
  enc.s = Space(1024)
  strlen = Len(string) 
  *codetmem = RC4Mem(@string, strlen, key)
  Base64Encoder(*codetmem, strlen, @enc, 1024)
  ProcedureReturn enc 
EndProcedure
Procedure.s MyDeCodeString(string.s, key.s)
  Protected strlen.l, dec.s, decoutp.s, str2len.l, *decodetmem
  dec.s = Space(1024)
  strlen = Len(string) 
  str2len.l = Base64Decoder(@string, strlen, @dec, 1024)
  *decodetmem = RC4Mem(@dec, str2len, key)
  decoutp.s = PeekS(*decodetmem, str2len)
  ProcedureReturn decoutp.s 
EndProcedure



text.s = "PureBasic"

codtext.s = MyCodeString(text, "1234")
Debug codtext

dectext.s = MyDeCodeString(codtext, "1234")
Debug dectext

Verfasst: 11.12.2007 19:32
von PBFetischist
Danke danke.

Genau das habe ich ein Jahr nach deinem Posting gesucht.

:D

Verfasst: 23.12.2007 18:05
von legion
Super Sache ! :allright:
Danke, kann ich gut gebrauchen.

Lg. Legion

Re: Textverschlüsselung mit RC4 und Base64

Verfasst: 23.12.2007 18:44
von Kiffi
Frogger hat geschrieben:

Code: Alles auswählen

Procedure.l RC4Mem(Mem.l, memLen.l, key.s) 
[...]
      temp = S(i)
      S(i) = S(j)
      S(j) = temp
[...]
... könnte man ersetzen durch:

Code: Alles auswählen

Swap S(i), S(j)
Grüße ... Kiffi