79 lines
2.5 KiB
VB.net
79 lines
2.5 KiB
VB.net
Module Module1
|
|
|
|
ReadOnly L_ALPHABET As String = "HXUCZVAMDSLKPEFJRIGTWOBNYQ"
|
|
ReadOnly R_ALPHABET As String = "PTLNBQDEOYSFAVZKGJRIHWXUMC"
|
|
|
|
Enum Mode
|
|
ENCRYPT
|
|
DECRYPT
|
|
End Enum
|
|
|
|
Function Exec(text As String, mode As Mode, Optional showSteps As Boolean = False) As String
|
|
Dim left = L_ALPHABET.ToCharArray()
|
|
Dim right = R_ALPHABET.ToCharArray()
|
|
Dim eText(text.Length - 1) As Char
|
|
Dim temp(25) As Char
|
|
|
|
For i = 0 To text.Length - 1
|
|
If showSteps Then Console.WriteLine("{0} {1}", String.Join("", left), String.Join("", right))
|
|
Dim index As Integer
|
|
If mode = Mode.ENCRYPT Then
|
|
index = Array.IndexOf(right, text(i))
|
|
eText(i) = left(index)
|
|
Else
|
|
index = Array.IndexOf(left, text(i))
|
|
eText(i) = right(index)
|
|
End If
|
|
If i = text.Length - 1 Then Exit For
|
|
|
|
'permute left
|
|
|
|
For j = index To 25
|
|
temp(j - index) = left(j)
|
|
Next
|
|
For j = 0 To index - 1
|
|
temp(26 - index + j) = left(j)
|
|
Next
|
|
Dim store = temp(1)
|
|
For j = 2 To 13
|
|
temp(j - 1) = temp(j)
|
|
Next
|
|
temp(13) = store
|
|
temp.CopyTo(left, 0)
|
|
|
|
'permute right
|
|
|
|
For j = index To 25
|
|
temp(j - index) = right(j)
|
|
Next
|
|
For j = 0 To index - 1
|
|
temp(26 - index + j) = right(j)
|
|
Next
|
|
store = temp(0)
|
|
For j = 1 To 25
|
|
temp(j - 1) = temp(j)
|
|
Next
|
|
temp(25) = store
|
|
store = temp(2)
|
|
For j = 3 To 13
|
|
temp(j - 1) = temp(j)
|
|
Next
|
|
temp(13) = store
|
|
temp.CopyTo(right, 0)
|
|
Next
|
|
|
|
Return eText
|
|
End Function
|
|
|
|
Sub Main()
|
|
Dim plainText = "WELLDONEISBETTERTHANWELLSAID"
|
|
Console.WriteLine("The original plaintext is : {0}", plainText)
|
|
Console.WriteLine(vbNewLine + "The left and right alphabets after each permutation during encryption are :" + vbNewLine)
|
|
Dim cipherText = Exec(plainText, Mode.ENCRYPT, True)
|
|
Console.WriteLine(vbNewLine + "The ciphertext is : {0}", cipherText)
|
|
Dim plainText2 = Exec(cipherText, Mode.DECRYPT)
|
|
Console.WriteLine(vbNewLine + "The recovered plaintext is : {0}", plainText2)
|
|
End Sub
|
|
|
|
End Module
|