Caesar Cipher加密VB.net

时间:2016-12-02 09:33:17

标签: vb.net

我正在尝试在VB.net中创建加密方法 我计划使用数组,因此您输入值,然后比较两个更改值的数组。

    Console.WriteLine("Please input text")
    Dim UserInput As String = Console.ReadLine
    UserInput = UserInput.ToUpper()
    Console.WriteLine("Original Input is " & UserInput)

    Dim EncriptedText As String
    Dim Numbers() As String = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", "23", "24", "25", "26", "27"}
    Dim Letters() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " "}


    For counter As Integer = 0 To UserInput.Length - 1
        Dim pos As Integer = Array.IndexOf(Numbers, UserInput.Chars(counter))
        Dim CharValue As Char = Letters.ElementAt(pos)
        UserInput = UserInput + CharValue
        Console.WriteLine(UserInput)
    Next

    Console.Read()
End Sub

当我尝试运行它时会抛出错误 有谁知道如何解决它?

  

错误:在Dim CharValue作为字符行找到

     

mscorlib.dll中发生未处理的“System.ArgumentOutOfRangeException”类型异常   附加信息:指数超出范围。必须是非负数且小于集合的大小。

我当时认为可能是因为我试图将数字转换为字符,如果可以,我可以使用其他方法吗?

1 个答案:

答案 0 :(得分:0)

1)您使用错误的数组来获取字母的索引,因此错误的数组将获得其加密值。

2)当你像这样使用Array.IndexOf时,你需要给它一个字符串来寻找而不是char。在你的代码中,它返回-1,因为它没有在字符串数组中找到char(一旦使用了正确的数组)。

3)你正在修改循环中的输入字符串,我想你的意思是为它使用一个单独的变量。

Console.WriteLine("Please input text")
Dim userInput As String = Console.ReadLine()
userInput = userInput.ToUpper()
Console.WriteLine("Original input is " & userInput)

Dim numbers() As String = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", "23", "24", "25", "26", "27"}
Dim letters() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " "}

Dim encryptedText As String = ""

For counter As Integer = 0 To userInput.Length - 1
    Dim pos As Integer = Array.IndexOf(letters, (userInput.Chars(counter)))
    Dim cipherValue As String = numbers.ElementAt(pos)
    encryptedText = encryptedText & cipherValue
    Console.WriteLine(encryptedText)
Next

Console.Read()

请注意,通常使用小写字母启动变量名称。

现在您可以获得输出,您可以继续查找代码中的其他问题:)