RC4-File

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
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

RC4-File

Beitrag von roherter »

Habe den RC4 code mal angepasst aus dem Purearea Archiv,
einmal benutzt verschlüsselt es die Datei beim zweitemal wieder Entschlüsseln.
Zum Entschlüsseln muss das InFile angepasst werden.

Code: Alles auswählen


Procedure Mod(a,b) 
  ProcedureReturn a-(a/b)*b 
EndProcedure 

Procedure.l RC4Mem(Mem.l, memLen.l, key.s) 
  ;RC4Mem(*MemoryBuffer.l, MomeryLength.l, Key.s) 
  
  Dim S.w(255) 
  Dim K.w(255) 
  i.l=0: j.l=0: t.l=0: x.l=0 
  temp.w=0: y.w=0 
  Outp.s="" 
  
  For i = 0 To 255 
    S(i) = i 
  Next 
  
  j = 1 
  For i = 0 To 255 
    If j > Len(key) 
      j = 1 
    EndIf 
    K(i) = Asc(Mid(key, j, 1)) 
    j = j + 1 
  Next i 
  
  j = 0 
  For i = 0 To 255 
    j = Mod(j + S(i) + K(i), 256) 
    temp = S(i) 
    S(i) = S(j) 
    S(j) = temp 
  Next i 
  
  i = 0 
  j = 0 
  For x = 0 To memLen-1 
    i = Mod(i + 1, 256) 
    j = Mod(j + S(i),256) 
    temp = S(i) 
    S(i) = S(j) 
    S(j) = temp 
    t = Mod(S(i) + Mod(S(j), 256) , 256) 
    y = S(t) 
    PokeB(Mem+x, PeekB(Mem+x)!y) 
  Next 
  ProcedureReturn Mem 
EndProcedure 




Procedure rc4filecrypt(InFile.s,OutFile.s,key.s)
  If OpenFile(0,InFile)
    flength=Lof(0)
    *filemem=AllocateMemory(flength)
    For i.l=0 To flength-1       
      PokeB(*filemem+i,ReadByte(0))
    Next 

   
    CloseFile(0)
  EndIf
  RC4Mem(*filemem,flength,key)
  If CreateFile(0,OutFile)
    For i.l=0 To flength-1
      WriteByte(0,PeekB(*filemem+i))
    Next
     CloseFile(0)
    ProcedureReturn 1
 
   
  Else 
   CloseFile(0)
    ProcedureReturn 0
   
  EndIf
  
EndProcedure

Purebasic 5.0 32bit und 64 bit

I'm back from hell