Seite 1 von 1

RC4-File

Verfasst: 09.10.2007 23:17
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