Here's the code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Public Function RC4(ByVal Expression As String, ByVal Password As String) As String | |
On Error Resume Next | |
Dim RB(0 To 255) As Integer, X As Long, Y As Long, Z As Long, Key() As Byte, ByteArray() As Byte, Temp As Byte | |
If Len(Password) = 0 Then | |
Exit Function | |
End If | |
If Len(Expression) = 0 Then | |
Exit Function | |
End If | |
If Len(Password) > 256 Then | |
Key() = StrConv(Left$(Password, 256), vbFromUnicode) | |
Else | |
Key() = StrConv(Password, vbFromUnicode) | |
End If | |
For X = 0 To 255 | |
RB(X) = X | |
Next X | |
X = 0 | |
Y = 0 | |
Z = 0 | |
For X = 0 To 255 | |
Y = (Y + RB(X) + Key(X Mod Len(Password))) Mod 256 | |
Temp = RB(X) | |
RB(X) = RB(Y) | |
RB(Y) = Temp | |
Next X | |
X = 0 | |
Y = 0 | |
Z = 0 | |
ByteArray() = StrConv(Expression, vbFromUnicode) | |
For X = 0 To Len(Expression) | |
Y = (Y + 1) Mod 256 | |
Z = (Z + RB(Y)) Mod 256 | |
Temp = RB(Y) | |
RB(Y) = RB(Z) | |
RB(Z) = Temp | |
ByteArray(X) = ByteArray(X) Xor (RB((RB(Y) + RB(Z)) Mod 256)) | |
Next X | |
RC4 = StrConv(ByteArray, vbUnicode) | |
End Function |
Komentar