废死了劲儿终于找到一个能用的,发现原来是 lenb 和 len 以及 ascb 和 asc 等等之间的一B之差
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

Private Function RC4(ByVal 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 > LenB(key) Then
j = 1
End If
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(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 & ChrB(AscB(MidB(inp, x, 1)) Xor y)
Next
RC4 = Outp
End Function
稍作改动,成为 ASP(VBScript) 版,貌似不能加密中文的,可能还需要一次转换
Function RC4(inp, key)
Dim S(255), K(255), i
Dim j, temp, Y, t , x
Dim Outp
For i = 0 To 255
s(i) = i
Next
j = 1
For i = 0 To 255
If j > LenB(key) Then
j = 1
End If
k(i) = AscB(MidB(key, j, 1))
j = j + 1
Next
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 = 0
j = 0
For x = 1 To LenB(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 & ChrB(AscB(MidB(inp, x, 1)) Xor y)
Next
RC4 = Outp
End Function
本文介绍了如何在VB中实现RC4算法,通过调整代码,使其适用于ASP(VBScript)环境。不过,加密中文可能出现问题,可能需要进一步的字符转换处理。
569

被折叠的 条评论
为什么被折叠?



