'===========================================================
' 过程及函数名: RC4
' 版本号 : 1.0
' 说明 : 本函数作用:RC4 加密及解密,可以加解密中文
' 引用 : --
' 输入参数 : SourceWords 文本,源文字
' KeyWords 文本,密码
' 输出值 : --
' 返回值 : 字符串,编码后的文本
' 调用演示 : RC4 "a","b"
' (或请直接看 test 过程。)
' 最后修改日期: 2006-12-13 16:22:00
' 示例地址 : http://access911.net/?kbid;72FABE1E15DCEDF3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : access911@gmail.com
' 版权 : 作者保留一切权力,
' 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Public Function RC4(SourceWords 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 OutWords As String
For i = 0 To 255
s(i) = i
Next
j = 1
For i = 0 To 255
If j > LenB(key) Then j = 1
k(i) = AscB(MidB(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 LenB(SourceWords)
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)
OutWords = OutWords & ChrB(AscB(MidB(SourceWords, X, 1)) Xor y)
Next
RC4 = OutWords
End Function
'===========================================================
' 过程及函数名: StrToHex
' 版本号 : 1.0
' 说明 : 本函数作用:将普通字符串编码为16进制字符串
' 引用 : --
' 输入参数 : Words 文本,需编码的字符串
' 输出值 : --
' 返回值 : String 文本,编码后的16进制字符串
' 出错时返回 "" (零长度字符串)
' 调用演示 : StrToHex "哈哈哈"
' (或请直接看 test 过程。)
' 最后修改日期: 2006-12-13 16:22:00
' 示例地址 : http://access911.net/?kbid;72FABE1E15DCEDF3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : access911@gmail.com
' 版权 : 作者保留一切权力,
' 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Public Function StrToHex(ByVal Words As String) As String
'本函数在不改动 RC4 编码的基础上,对 RC4 的结果进行再编码
'因此在效率上比将本编码直接加入 RC4 函数的方式稍慢
Dim i As Long
Dim strResult As String
On Error GoTo StrToHex_Err
For i = 1 To LenB(Words)
strResult = strResult & Right("00" & CStr(Hex(AscB(MidB(Words, i, 1)))), 2)
Next
StrToHex = LCase(strResult)
Exit Function
StrToHex_Err:
'出错时直接返回零长度字符串
Debug.Print Err.Number & Err.Description
StrToHex = ""
End Function
'===========================================================
' 过程及函数名: HexToStr
' 版本号 : 1.0
' 说明 : 本函数作用:将16进制字符串解码为普通字符串
' 引用 : --
' 输入参数 : Words 文本,需解码的字符串
' 输出值 : --
' 返回值 : String 文本,解码后的普通文本
' 出错时返回 "" (零长度字符串)
' 调用演示 : HexToStr "312d7a41fcf4b8803d991d929d25d1c8e249e562153efe1dc65b"
' (或请直接看 test 过程。)
' 最后修改日期: 2006-12-13 16:22:00
' 示例地址 : http://access911.net/?kbid;72FABE1E15DCEDF3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : access911@gmail.com
' 版权 : 作者保留一切权力,
' 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Public Function HexToStr(ByVal Words As String) As String
'本函数在不改动 RC4 编码的基础上,对 RC4 的结果进行再编码
'因此在效率上比将本编码直接加入 RC4 函数的方式稍慢
Dim i As Long
Dim strResult As String
On Error GoTo HexToStr_Err
For i = 1 To Len(Words) Step 2
strResult = strResult & ChrB(CLng("&H" & Mid(Words, i, 2)))
Next
HexToStr = strResult
Exit Function
HexToStr_Err:
'出错时直接返回零长度字符串
Debug.Print Err.Number & Err.Description
HexToStr = ""
End Function