2016-12-02 15 views
0

私はVB.netで暗号化メソッドを作成しようとしています。
私は値を入力するように配列を使うつもりで、値を変更する2つの配列を比較します。シーザー暗号の暗号化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に見つかり型「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() 

小文字で変数名を開始するのが通常であることに注意してください。今、あなたは出力を得ることができることを、あなたはコードで他の問題を見つけるために行くことができます

:)