90 lines
2.6 KiB
Plaintext
90 lines
2.6 KiB
Plaintext
|
<%
|
||
|
Option Explicit
|
||
|
Dim ObjRC4
|
||
|
Set ObjRC4 = New clsRC4
|
||
|
ObjRC4.Key = "Joe"
|
||
|
Response.Write """" & ObjRC4.Crypt("hello") & """"
|
||
|
Set ObjRC4 = Nothing
|
||
|
' --------------------------------------
|
||
|
|
||
|
Class clsRC4
|
||
|
|
||
|
Private mStrKey
|
||
|
Private mBytKeyAry(255)
|
||
|
Private mBytCypherAry(255)
|
||
|
|
||
|
Private Sub InitializeCypher()
|
||
|
|
||
|
Dim lBytJump
|
||
|
Dim lBytIndex
|
||
|
Dim lBytTemp
|
||
|
|
||
|
For lBytIndex = 0 To 255
|
||
|
mBytCypherAry(lBytIndex) = lBytIndex
|
||
|
Next
|
||
|
' Switch values of Cypher arround based off of index and Key value
|
||
|
lBytJump = 0
|
||
|
For lBytIndex = 0 To 255
|
||
|
|
||
|
' Figure index To switch
|
||
|
lBytJump = (lBytJump + mBytCypherAry(lBytIndex) + mBytKeyAry(lBytIndex)) Mod 256
|
||
|
|
||
|
' Do the switch
|
||
|
lBytTemp = mBytCypherAry(lBytIndex)
|
||
|
mBytCypherAry(lBytIndex) = mBytCypherAry(lBytJump)
|
||
|
mBytCypherAry(lBytJump) = lBytTemp
|
||
|
|
||
|
Next
|
||
|
End Sub
|
||
|
|
||
|
Public Property Let Key(ByRef pStrKey)
|
||
|
Dim lLngKeyLength
|
||
|
Dim lLngIndex
|
||
|
|
||
|
If pStrKey = mStrKey Then Exit Property
|
||
|
lLngKeyLength = Len(pStrKey)
|
||
|
If lLngKeyLength = 0 Then Exit Property
|
||
|
mStrKey = pStrKey
|
||
|
lLngKeyLength = Len(pStrKey)
|
||
|
For lLngIndex = 0 To 255
|
||
|
mBytKeyAry(lLngIndex) = Asc(Mid(pStrKey, ((lLngIndex) Mod (lLngKeyLength)) + 1, 1))
|
||
|
Next
|
||
|
End Property
|
||
|
|
||
|
Public Property Get Key()
|
||
|
Key = mStrKey
|
||
|
End Property
|
||
|
Public Function Crypt(ByRef pStrMessage)
|
||
|
Dim lBytIndex
|
||
|
Dim lBytJump
|
||
|
Dim lBytTemp
|
||
|
Dim lBytY
|
||
|
Dim lLngT
|
||
|
Dim lLngX
|
||
|
|
||
|
' Validate data
|
||
|
If Len(mStrKey) = 0 Then Exit Function
|
||
|
If Len(pStrMessage) = 0 Then Exit Function
|
||
|
Call InitializeCypher()
|
||
|
|
||
|
lBytIndex = 0
|
||
|
lBytJump = 0
|
||
|
For lLngX = 1 To Len(pStrMessage)
|
||
|
lBytIndex = (lBytIndex + 1) Mod 256 ' wrap index
|
||
|
lBytJump = (lBytJump + mBytCypherAry(lBytIndex)) Mod 256 ' wrap J+S()
|
||
|
|
||
|
' Add/Wrap those two
|
||
|
lLngT = (mBytCypherAry(lBytIndex) + mBytCypherAry(lBytJump)) Mod 256
|
||
|
|
||
|
' Switcheroo
|
||
|
lBytTemp = mBytCypherAry(lBytIndex)
|
||
|
mBytCypherAry(lBytIndex) = mBytCypherAry(lBytJump)
|
||
|
mBytCypherAry(lBytJump) = lBytTemp
|
||
|
lBytY = mBytCypherAry(lLngT)
|
||
|
' Character Encryption ...
|
||
|
Crypt = Crypt & Chr(Asc(Mid(pStrMessage, lLngX, 1)) Xor lBytY)
|
||
|
Next
|
||
|
|
||
|
End Function
|
||
|
End Class
|
||
|
%>
|