Textverschlüsselung mit RC4 und Base64

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Textverschlüsselung mit RC4 und Base64

Beitrag 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
[PB4.20]
PBFetischist
Beiträge: 55
Registriert: 26.10.2004 19:42

Beitrag von PBFetischist »

Danke danke.

Genau das habe ich ein Jahr nach deinem Posting gesucht.

:D
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Super Sache ! :allright:
Danke, kann ich gut gebrauchen.

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Textverschlüsselung mit RC4 und Base64

Beitrag 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
a²+b²=mc²
Antworten