
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