2016-12-02 170 views
0

我想在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 

當我嘗試運行它時會引發錯誤。
有沒有人有任何想法我可以修復它?

錯誤:上的暗淡的charValue實測爲CHAR線

類型「System.ArgumentOutOfRangeException」的未處理的異常出現在mscorlib.dll 其他信息:索引超出範圍。必須是非負數且小於集合的大小。

我想這可能是因爲我試圖將數字轉換爲字符,如果有的話,我可以使用其他方法?

+1

你爲什麼要實現這樣一個** **較弱的加密算法? –

+1

***不要推出自己的加密***至少對於任何敏感的事情,因爲許多事情可能會出錯... – Codexer

回答

0

1)您正在使用錯誤的數組來獲取字母的索引,因此錯誤的數組獲取其加密值。

2)當你使用這樣的Array.IndexOf時,你需要給它一個字符串來查找而不是char。在你的代碼中,它返回-1,因爲它沒有在字符串數組中找到字符串(一旦使用了正確的數組)。

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() 

請注意,通常以小寫字母開頭的變量名稱。現在

,你可以得到輸出,你可以去尋找其他問題的代碼:)