<% '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This script performs 'RC4' Stream Encryption ::: '::: (Based on what is widely thought to be RSA's RC4 ::: '::: algorithm. It produces output streams that are identical ::: '::: to the commercial products) ::: '::: ::: '::: This script is Copyright © 1999 by Mike Shaffer ::: '::: ALL RIGHTS RESERVED WORLDWIDE ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This routine passes the standard test vectors for the ::: '::: RC4 algorithm. The test vectors are included below for ::: '::: easy cut-and-paste verification. It is recommended that ::: '::: you remove these comments for actual production to ::: '::: reduce initial script parsing/processing time. ::: '::: ::: '::: ::: '::: Test harness vectors: ::: '::: ::: '::: Test vector 0 ::: '::: Key: &h01 &h23 &h45 &h67 &h89 &hab &hcd &hef ::: '::: Input: &h01 &h23 &h45 &h67 &h89 &hab &hcd &hef ::: '::: Output: &h75 &hb7 &h87 &h80 &h99 &he0 &hc5 &h96 ::: '::: ::: '::: Test vector 1 ::: '::: Key: &h01 &h23 &h45 &h67 &h89 &hab &hcd &hef ::: '::: Input: &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 ::: '::: Output: &h74 &h94 &hc2 &he7 &h10 &h4b &h08 &h79 ::: '::: ::: '::: Test vector 2 ::: '::: Key: &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 ::: '::: Input: &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 ::: '::: Output: &hde &h18 &h89 &h41 &ha3 &h37 &h5d &h3a ::: '::: ::: '::: Test vector 3 ::: '::: Key: &hef &h01 &h23 &h45 ::: '::: Input: &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 &h00 ::: '::: Output: &hd6 &ha1 &h41 &ha7 &hec &h3c &h38 &hdf &hbd &h61 ::: '::: ::: '::: Test vector 4 ::: '::: Key: &h01 &h23 &h45 &h67 &h89 &hab &hcd &hef ::: '::: Input: ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 &h01 ::: '::: &h01 ::: '::: Output: ::: '::: &h75 &h95 &hc3 &he6 &h11 &h4a &h09 &h78 &h0c &h4a &hd4 ::: '::: &h52 &h33 &h8e &h1f &hfd &h9a &h1b &he9 &h49 &h8f ::: '::: &h81 &h3d &h76 &h53 &h34 &h49 &hb6 &h77 &h8d &hca ::: '::: &hd8 &hc7 &h8a &h8d &h2b &ha9 &hac &h66 &h08 &h5d ::: '::: &h0e &h53 &hd5 &h9c &h26 &hc2 &hd1 &hc4 &h90 &hc1 ::: '::: &heb &hbe &h0c &he6 &h6d &h1b &h6b &h1b &h13 &hb6 ::: '::: &hb9 &h19 &hb8 &h47 &hc2 &h5a &h91 &h44 &h7a &h95 ::: '::: &he7 &h5e &h4e &hf1 &h67 &h79 &hcd &he8 &hbf &h0a ::: '::: &h95 &h85 &h0e &h32 &haf &h96 &h89 &h44 &h4f &hd3 ::: '::: &h77 &h10 &h8f &h98 &hfd &hcb &hd4 &he7 &h26 &h56 ::: '::: &h75 &h00 &h99 &h0b &hcc &h7e &h0c &ha3 &hc4 &haa ::: '::: &ha3 &h04 &ha3 &h87 &hd2 &h0f &h3b &h8f &hbb &hcd ::: '::: &h42 &ha1 &hbd &h31 &h1d &h7a &h43 &h03 &hdd &ha5 ::: '::: &hab &h07 &h88 &h96 &hae &h80 &hc1 &h8b &h0a &hf6 ::: '::: &h6d &hff &h31 &h96 &h16 &heb &h78 &h4e &h49 &h5a ::: '::: &hd2 &hce &h90 &hd7 &hf7 &h72 &ha8 &h17 &h47 &hb6 ::: '::: &h5f &h62 &h09 &h3b &h1e &h0d &hb9 &he5 &hba &h53 ::: '::: &h2f &haf &hec &h47 &h50 &h83 &h23 &he6 &h71 &h32 ::: '::: &h7d &hf9 &h44 &h44 &h32 &hcb &h73 &h67 &hce &hc8 ::: '::: &h2f &h5d &h44 &hc0 &hd0 &h0b &h67 &hd6 &h50 &ha0 ::: '::: &h75 &hcd &h4b &h70 &hde &hdd &h77 &heb &h9b &h10 ::: '::: &h23 &h1b &h6b &h5b &h74 &h13 &h47 &h39 &h6d &h62 ::: '::: &h89 &h74 &h21 &hd4 &h3d &hf9 &hb4 &h2e &h44 &h6e ::: '::: &h35 &h8e &h9c &h11 &ha9 &hb2 &h18 &h4e &hcb &hef ::: '::: &h0c &hd8 &he7 &ha8 &h77 &hef &h96 &h8f &h13 &h90 ::: '::: &hec &h9b &h3d &h35 &ha5 &h58 &h5c &hb0 &h09 &h29 ::: '::: &h0e &h2f &hcd &he7 &hb5 &hec &h66 &hd9 &h08 &h4b ::: '::: &he4 &h40 &h55 &ha6 &h19 &hd9 &hdd &h7f &hc3 &h16 ::: '::: &h6f &h94 &h87 &hf7 &hcb &h27 &h29 &h12 &h42 &h64 ::: '::: &h45 &h99 &h85 &h14 &hc1 &h5d &h53 &ha1 &h8c &h86 ::: '::: &h4c &he3 &ha2 &hb7 &h55 &h57 &h93 &h98 &h81 &h26 ::: '::: &h52 &h0e &hac &hf2 &he3 &h06 &h6e &h23 &h0c &h91 ::: '::: &hbe &he4 &hdd &h53 &h04 &hf5 &hfd &h04 &h05 &hb3 ::: '::: &h5b &hd9 &h9c &h73 &h13 &h5d &h3d &h9b &hc3 &h35 ::: '::: &hee &h04 &h9e &hf6 &h9b &h38 &h67 &hbf &h2d &h7b ::: '::: &hd1 &hea &ha5 &h95 &hd8 &hbf &hc0 &h06 &h6f &hf8 ::: '::: &hd3 &h15 &h09 &heb &h0c &h6c &haa &h00 &h6c &h80 ::: '::: &h7a &h62 &h3e &hf8 &h4c &h3d &h33 &hc1 &h95 &hd2 ::: '::: &h3e &he3 &h20 &hc4 &h0d &he0 &h55 &h81 &h57 &hc8 ::: '::: &h22 &hd4 &hb8 &hc5 &h69 &hd8 &h49 &hae &hd5 &h9d ::: '::: &h4e &h0f &hd7 &hf3 &h79 &h58 &h6b &h4b &h7f &hf6 ::: '::: &h84 &hed &h6a &h18 &h9f &h74 &h86 &hd4 &h9b &h9c ::: '::: &h4b &had &h9b &ha2 &h4b &h96 &hab &hf9 &h24 &h37 ::: '::: &h2c &h8a &h8f &hff &hb1 &h0d &h55 &h35 &h49 &h00 ::: '::: &ha7 &h7a &h3d &hb5 &hf2 &h05 &he1 &hb9 &h9f &hcd ::: '::: &h86 &h60 &h86 &h3a &h15 &h9a &hd4 &hab &he4 &h0f ::: '::: &ha4 &h89 &h34 &h16 &h3d &hdd &he5 &h42 &ha6 &h58 ::: '::: &h55 &h40 &hfd &h68 &h3c &hbf &hd8 &hc0 &h0f &h12 ::: '::: &h12 &h9a &h28 &h4d &hea &hcc &h4c &hde &hfe &h58 ::: '::: &hbe &h71 &h37 &h54 &h1c &h04 &h71 &h26 &hc8 &hd4 ::: '::: &h9e &h27 &h55 &hab &h18 &h1a &hb7 &he9 &h40 &hb0 ::: '::: &hc0 ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Dim sbox(255) Dim key(255) Sub RC4Initialize(strPwd) '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: This routine called by EnDeCrypt function. Initializes the ::: '::: sbox and the key array) ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: dim tempSwap dim a dim b intLength = len(strPwd) For a = 0 To 255 key(a) = asc(mid(strpwd, (a mod intLength)+1, 1)) sbox(a) = a next b = 0 For a = 0 To 255 b = (b + sbox(a) + key(a)) Mod 256 tempSwap = sbox(a) sbox(a) = sbox(b) sbox(b) = tempSwap Next End Sub Function EnDeCrypt(plaintxt, psw) '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: This routine does all the work. Call it both to ENcrypt ::: '::: and to DEcrypt your data. ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: dim temp dim a dim i dim j dim k dim cipherby dim cipher i = 0 j = 0 RC4Initialize psw For a = 1 To Len(plaintxt) i = (i + 1) Mod 256 j = (j + sbox(i)) Mod 256 temp = sbox(i) sbox(i) = sbox(j) sbox(j) = temp k = sbox((sbox(i) + sbox(j)) Mod 256) cipherby = Asc(Mid(plaintxt, a, 1)) Xor k cipher = cipher & Chr(cipherby) Next EnDeCrypt = cipher End Function %>