VB - 凯撒密码仿真

VB - Caesar Cipher emulation

我正在尝试模拟凯撒密码加密。问题是每当我输入 "wxyz"
(移位 3)输出为 "z{|}"。但预期的输出应该是 "zabc".

有人知道要添加什么吗?

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim plaintext As String = TextBox1.Text
            Dim charArray() As Char = plaintext.ToCharArray
            Dim shift = TextBox2.Text
            Dim character As String
            Dim temp As String
            TextBox3.Text = ""



            If shift <> "" And IsNumeric(shift) Then
                If plaintext = "" Then
                    MsgBox("Please input some plain text")
                    Exit Sub
                End If
                If shift > 26 Then
                    MsgBox("Maximum shifts reached. Limit is 26!!")
                    Exit Sub
                End If
                For loope = 0 To charArray.Length - 1 Step +1
                    temp = charArray(loope)

                    character = Chr(Asc(temp) + shift)

                    TextBox3.Text += character


                Next
                Exit Sub
            Else
                MsgBox("Input numbers only!!")
            End If


        End Sub

当您移动 Ascii 代码时,您应该验证它不会大于 122,这是字符 "z" 的 Ascii 代码。如果你超过那个点,你会得到标点符号、符号和那些东西。 Google "ASCII table" 你可以很容易地看到它。

所以,为了解决你的问题,如果你移位后得到的 Ascii 码大于 122,你应该返回并从 97 开始,这是 "a" 的 ascii。

所以,而不是这个:

            For loope = 0 To charArray.Length - 1 Step +1
                temp = charArray(loope)
                character = Chr(Asc(temp) + shift)
                TextBox3.Text += character
            Next

你应该这样做

            For loope = 0 To charArray.Length - 1 Step +1
                temp = charArray(loope)
                character = Chr(Asc(temp) + shift)
                ' You substract 26, the whole length of the alphabet
                If character > 122 Then
                   character = character - 26 
                End If
                TextBox3.Text += character
            Next

不太确定如果 shift 大于 26 这是否稳定,但无论如何您已经检查了它的值所以它应该可以工作。