RC4经典加密算法asp/VBs版本代码

来源:中国站长站 时间:2008-02-17 17:32:00 

什么是RC4算法呢?也许您还不知道,没关系我为您找了下相关资料方便大家查看;

RC4加密算法 

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。

RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示):


for (i=0; i<n; i++)
s=i;
j=0;
for (i=0; i<n; i++)
{
j=(j+s+k)%256;
swap(s, s[j]);
}


在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的:


i=j=0;
while (明文未结束)
{
++i%=n;
j=(j+s)%n;
swap(s, s[j]);
sub_k=s((s+s[j])%n);
}


得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。

由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。关于如何破解xor加密,请参看Bruce Schneier的Applied Cryptography一书的1.4节Simple XOR,在此我就不细说了。那么,RC4算法生成的子密钥序列是否会出现重复呢?经过我的测试,存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。

下面是asp 、VBscript版的Rc4算法源代码:


Public Sub main()
Dim key As String
For i = 1 To 16
Randomize
key = key & Chr(Rnd * 255)
Next i
MsgBox RC4(RC4("Welcome To Plindge Studio!", key), key)
End Sub
Public Function RC4(inp As String, key As String) As String
Dim S(0 To 255) As Byte, K(0 To 255) As Byte, i As Long
Dim j As Long, temp As Byte, Y As Byte, t As Long, x As Long
Dim Outp As String 
For i = 0 To 255
S(i) = i
Next
j = 1
For i = 0 To 255
If j > Len(key) Then j = 1
K(i) = Asc(Mid(key, j, 1))
j = j + 1
Next i
j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
Next i
i = 0
j = 0
For x = 1 To Len(inp)
i = (i + 1) Mod 256
j = (j + S(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
t = (S(i) + (S(j) Mod 256)) Mod 256
Y = S(t)
Outp = Outp & Chr(Asc(Mid(inp, x, 1)) Xor Y)
Next
RC4 = Outp
End Function


标签:RC4,算法,VBs,asp
0
投稿

猜你喜欢

  • MySQL修改配置,区分大小写

    2010-12-03 16:31:00
  • 如何使用FSO修改文件夹的名称

    2008-10-11 14:24:00
  • js检测浏览器语种,适合于多语言版本的站点

    2007-09-12 19:16:00
  • 配置SQL Server以允许远程连接

    2010-03-08 13:12:00
  • [奇招] JS暴虐查找算法

    2008-07-06 21:17:00
  • 用asp实现读取文件的最后一行的代码

    2011-03-08 10:55:00
  • Javascript 获取css属性

    2009-05-31 16:49:00
  • 导航设计的流行趋势

    2007-12-25 12:06:00
  • MySQL 数值类型概述int smallint tinyint

    2010-11-02 11:46:00
  • 混乱的标记语言XHTML2/HTML5

    2009-07-31 14:27:00
  • 删除多余的属性 xmlns=""

    2010-08-24 18:41:00
  • 历数Firefox2.0对XML处理的改进

    2007-11-27 12:41:00
  • 关于select元素的两个小问题

    2008-12-25 13:41:00
  • 自适应css布局——流动布局新时代[译]

    2009-08-13 12:28:00
  • 适宜做简单搜索的MySQL数据库全文索引

    2009-01-04 13:11:00
  • 做网站要习惯化与去习惯化

    2008-06-18 13:36:00
  • 使用 JSON 进行数据传输

    2008-06-15 07:12:00
  • 简化ADO数据库操作的控件(带分页功能)

    2008-05-20 13:15:00
  • SQL Server密码管理的六个危险判断

    2008-10-23 13:57:00
  • 升级SQL Server 2008数据库引擎

    2009-03-25 12:58:00
  • asp之家 网络编程 m.aspxhome.com