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 这是否稳定,但无论如何您已经检查了它的值所以它应该可以工作。
我正在尝试模拟凯撒密码加密。问题是每当我输入 "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 这是否稳定,但无论如何您已经检查了它的值所以它应该可以工作。