{ > Is there out there that has any good encription code.. something like rsa? {****************************************************************************} { Unit to Compute in a Very Pascal Way } {****************************************************************************} { Incredible File Utilities } {****************************************************************************} { Version : 1.0 Dec 1990 } {****************************************************************************} Unit FileUtil ; {****************************************************************************} Interface uses dos ; {****************************************************************************} Const Crea = 'UNIT FILEUTIL.TPU V.1.0 By: Jeffrey N. Thompson' ; Creat = '(C) Copywrite 1990,1991 By KJE Software Opportunities Exclusively' ;{ Procedure and function List } Function FileExists(pathname:string):boolean ; function KillFile(pathname : string):boolean ; Procedure cryptB(var Rec ; size : word ; Sym : Byte) ; Procedure CryptStr(var Rec ; Size : Word ; Ecrypt : string) ; Procedure CryptS(Var Rec ; Size : Word ; Seed : longint) ; Function CryptfileStr(Fname:string; Ecrypt : string) : integer ; Function CryptfileWithFile(Fname,Keyname : String) : Integer ; Function CryptFileS(Fname : string ; Seed : longint) : integer ; {****************************************************************************} Implementation { Uses } { Procedures and functions follow } {****************************************************************************} { Check if a filename Exists in the current drive and directory. } Function FileExists(pathname : string) : boolean ; Var search : searchrec ; exists : boolean ; Begin { Exists } exists := false ; findfirst(pathname,anyfile,search) ; exists := (doserror = 0) and (search.name <> '') ; fileexists := exists ; End ; { Exists } {****************************************************************************} { Destroys a file. Unrecoverably } function KillFile(pathname : string):boolean ; var kfile : file ; buffer : array[1..2048] of byte ; numread,numwritten : word ; I : integer ; j2 : longint ; found : boolean ; begin {$F-} if fileexists(pathname) then begin found := true ; assign(kfile,pathname) ; setfattr(kfile,0) ; reset(kfile,1) ; repeat Blockread(kfile,buffer,sizeof(buffer),numread) ; j2 := filepos(kfile) ; for I := 1 to numread do buffer[i] := random(255) ; seek(kfile,j2-numread) ; blockwrite(kfile,buffer,numread,numwritten) ; seek(kfile,j2) ; until (numread = 0) or (numwritten <> numread) ; close(kfile) ; erase(kfile) ; end else found := false ; {$F+} killfile := (ioresult=0) and (found) ; end ; {****************************************************************************} { Encrypt a record of SIZE with a Byte Sized SYMbol } procedure cryptb(var Rec ; size : word ; Sym : Byte) ; type buffers = array[1..65535] of byte ; var I : word ; buffer : ^buffers ; begin buffer := nil ; buffer := @rec ; for I := 1 to size do buffer^[I] := buffer^[i] xor sym ; end ; {****************************************************************************} { Encrypts a record of SIZE with a Sliding String method } procedure CryptStr(var Rec ; Size : Word ; Ecrypt : string) ; type buffers = array[1..65535] of byte ; var I,J : word ; buffer : ^buffers ; l : integer ; c1 : char ; begin l := length(ecrypt) ; if l = 1 then begin c1 := ecrypt[1] ; cryptb(rec,size,byte(c1)) ; exit ; end ; if l<2 then exit ; buffer := nil ; buffer := @rec ; j := 1 ; for I := 1 to size do begin buffer^[I] := buffer^[i] xor byte(ecrypt[j]) ; inc(j) ; if j > l then begin j := 1 ; c1 := ecrypt[1] ; move(ecrypt[2],ecrypt[1],l-1) ; ecrypt[l] := c1 ; end ; end ; end ; {****************************************************************************} { Encrypts a record of SIZE with a list of random numbers produced by Initial Seeding with SEED } procedure cryptS(var Rec ; size : word ; Seed : longint) ; type buffers = array[1..65535] of byte ; var I : word ; buffer : ^buffers ; begin randseed := seed ; buffer := nil ; buffer := @rec ; for I := 1 to size do buffer^[I] := buffer^[i] xor byte(random(254)+1) ; end ; {****************************************************************************} { Encrypts a file, with a string using a sliding string method } { String em up! } function CryptfileStr(Fname:string; Ecrypt : string) : integer ; const tempfilename = 'KJETLHM.DS2' ; var fromfile,tofile : file ; buffer : array[1..2048] of byte ; numread,numwritten,attr : word ; error : boolean ; I,J,L : integer ; j2 : longint ; c1 : char ; begin if not fileexists(fname) then begin cryptfileStr := 1 ; exit ; end ; if length(ecrypt) <= 1 then begin cryptfileStr := 2 ; exit ; end ; l := length(ecrypt) ; {$I-} assign(fromfile,fname) ; assign(tofile,tempfilename) ; getfattr(fromfile,attr) ; setfattr(fromfile,0) ; reset(fromfile,1) ; rewrite(tofile,1) ; repeat blockread(fromfile,buffer,sizeof(buffer),numread) ; j := 1 ; for I := 1 to sizeof(buffer) do begin buffer[I] := buffer[I] xor byte(ecrypt[j]) ; inc(j) ; if j > l then begin j := 1 ; c1 := ecrypt[1] ; move(ecrypt[2],ecrypt[1],l-1) ; ecrypt[l] := c1 ; end ; end ; blockwrite(tofile,buffer,numread,numwritten) ; until (numread = 0) or (numwritten <> numread) ; close(tofile) ; close(fromfile) ; error := killfile(fname) ; rename(tofile,fname) ; setfattr(tofile,attr) ; {$I+} cryptfileStr := (IOresult) end ; {****************************************************************************} { encrypts a file with another file as the key, using a sliding method } { File this sucker! } Function CryptfileWithFile(Fname,Keyname : String) : Integer ; const Tempfilename = 'KJETLHM.DS3' ; var Infile,Keyfile,Outfile : file ; Bfile : File of Byte ; inBuffer,keybuffer,outbuffer : array[1..2048] of byte ; attr,kattr : word ; I,J : longint ; numread,numwritten,numkread : word ; error : boolean ; begin if not fileexists(fname) then begin cryptfilewithfile := 1 ; exit ; end ; if not fileexists(keyname) then begin cryptfilewithfile := 2 ; exit ; end ; {$I-} Assign(infile,fname) ; assign(keyfile,keyname) ; assign(outfile,tempfilename) ; getfattr(infile,attr) ; getfattr(keyfile,kattr) ; setfattr(infile,0) ; setfattr(keyfile,0) ; reset(infile,1) ; reset(keyfile,1) ; rewrite(outfile,1) ; repeat { Fill the input buffer } blockread(infile,inbuffer,sizeof(inbuffer),numread) ; { Fill the key buffer } blockread(keyfile,keybuffer,sizeof(keybuffer),numkread) ; j := numkread ; if numkread < numread then { The Keyfile is smaller } repeat { Keep resetting and reading until the buffer is full } reset(keyfile,1) ; blockread(keyfile,keybuffer[j+1],numread-j,numkread) ; j := j + numkread ; if j > numread then HALT(3) ; until j = numread ; for I := 1 to numread do outbuffer[I] := inbuffer[I] XOR keybuffer[I] ; blockwrite(outfile,outbuffer,numread,numwritten) ; until (numread = 0) or (numwritten <> numread) ; close(keyfile) ; setfattr(keyfile,kattr) ; { Restore the attributes } close(infile) ; close(outfile) ; { Now destroy the old file } error := killfile(fname) ; rename(outfile,fname) ; setfattr(outfile,attr) ; {$I+} cryptfilewithfile := IoResult ; end ; {****************************************************************************} { Encrypts a file, using a list of random numbers generated with an initial SEED. The Seed is your key } function CryptfileS(Fname:string; Seed : Longint) : integer ; const tempfilename = 'KJETLHM.DS4' ; var fromfile,tofile : file ; buffer : array[1..2048] of byte ; numread,numwritten,attr : word ; I : integer ; error : boolean ; begin if not fileexists(fname) then begin cryptfileS := 1 ; exit ; end ; randseed := seed ; {$I-} assign(fromfile,fname) ; assign(tofile,tempfilename) ; getfattr(fromfile,attr) ; setfattr(fromfile,0) ; reset(fromfile,1) ; rewrite(tofile,1) ; repeat blockread(fromfile,buffer,sizeof(buffer),numread) ; for I := 1 to numread do buffer[I] := buffer[I] xor byte(random(254)+1) ; blockwrite(tofile,buffer,numread,numwritten) ; until (numread = 0) or (numwritten <> numread) ; close(tofile) ; close(fromfile) ; error := killfile(fname); rename(tofile,fname) ; setfattr(tofile,attr) ; {$I+} cryptfileS := IOresult ; end ; {****************************************************************************} {****************************************************************************} end. { Unit } { These are not weird math methods of encryption. They are simple Extreemly fast XOR methods. By using multiple methods on various parts of a file, or database, you can foil any attempt at cracking. This is true because the cracker has no way of knowing where to start, even if he possesses the keys.. I have a standing challenge, if anyone cares to take it... Here are the methods, I'll post a small file, and even give you the keys I used to ecrypt a simple one line sentence. If you can crack it, I'll buy you a pentium computer! }