Friday, May 28, 2010

[VB.NET] RC4 Encryption

Public Function rc4(ByVal message As String, ByVal password As String) As String

Dim i As Integer = 0
Dim j As Integer = 0
Dim cipher As New StringBuilder
Dim returnCipher As String = String.Empty

Dim sbox As Integer() = New Integer(256) {}
Dim key As Integer() = New Integer(256) {}

Dim intLength As Integer = password.Length

Dim a As Integer = 0
While a <= 255

Dim ctmp As Char = (password.Substring((a Mod intLength), 1).ToCharArray()(0))

key(a) = Microsoft.VisualBasic.Strings.Asc(ctmp)
sbox(a) = a
System.Math.Max(System.Threading.Interlocked.Increment(a), a - 1)
End While

Dim x As Integer = 0

Dim b As Integer = 0
While b <= 255
x = (x + sbox(b) + key(b)) Mod 256
Dim tempSwap As Integer = sbox(b)
sbox(b) = sbox(x)
sbox(x) = tempSwap
System.Math.Max(System.Threading.Interlocked.Increment(b), b - 1)
End While

a = 1

While a <= message.Length

Dim itmp As Integer = 0

i = (i + 1) Mod 256
j = (j + sbox(i)) Mod 256
itmp = sbox(i)
sbox(i) = sbox(j)
sbox(j) = itmp

Dim k As Integer = sbox((sbox(i) + sbox(j)) Mod 256)

Dim ctmp As Char = message.Substring(a - 1, 1).ToCharArray()(0)

itmp = Asc(ctmp)

Dim cipherby As Integer = itmp Xor k

cipher.Append(Chr(cipherby))
System.Math.Max(System.Threading.Interlocked.Increment(a), a - 1)
End While

returnCipher = cipher.ToString
cipher.Length = 0

Return returnCipher

End Function