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
投稿

猜你喜欢

  • 用Python分析3天破10亿的《我不是药神》到底神在哪?

    2023-04-29 06:16:26
  • ASP中双引号单引号和&连接符使用技巧

    2007-10-01 18:20:00
  • 对python numpy数组中冒号的使用方法详解

    2022-05-15 11:26:41
  • JS中把函数作为另一函数的参数传递方法(总结)

    2024-05-05 09:14:39
  • Python常见数字运算操作实例小结

    2022-01-02 21:04:16
  • 如何表示python中的相对路径

    2022-09-06 14:13:41
  • MYSQL使用inner join 进行 查询/删除/修改示例

    2024-01-17 12:01:43
  • 深入了解Python枚举类型的相关知识

    2022-08-02 06:15:40
  • mysql日志滚动

    2024-01-26 18:38:52
  • IE7异常CSS 导致内存破坏漏洞

    2009-11-30 12:52:00
  • 停止事件冒泡和阻止浏览器默认行为的脚本

    2008-09-09 22:09:00
  • Python Playwright的使用详解

    2021-10-10 03:30:44
  • RSA加密解密算法 asp源码

    2009-08-28 13:10:00
  • 开展全面的网站评估

    2007-09-27 19:21:00
  • git 一个可以提高开发效率的命令:cherry-pick详解

    2022-03-03 01:40:22
  • 如何解决django配置settings时遇到Could not import settings 'conf.local'

    2021-07-23 13:31:57
  • PyCharm取消波浪线、下划线和中划线的实现

    2021-11-27 02:17:27
  • django框架使用方法详解

    2021-07-07 18:12:00
  • asp数据转换函数示例

    2008-04-13 06:52:00
  • 基于ORA-12170 TNS 连接超时解决办法详解

    2023-06-30 18:18:30
  • asp之家 网络编程 m.aspxhome.com