Sub decrytpion()
Dim plain As String
Dim keyword As String
Dim keyword2 As String
Dim encoded_message() As Integer
Console.ForegroundColor = ConsoleColor.Red
Console.Write("Enter your plaintext: ")
plain = Console.ReadLine.ToUpper()
Console.Write("Enter your keyword: ")
keyword = Console.ReadLine.ToUpper()
Console.Write("Enter your second keyword: ")
keyword2 = Console.ReadLine.ToUpper()
While plain.Length > keyword.Length
keyword = keyword + keyword
End While
While plain.Length > keyword2.Length
keyword2 = keyword2 + keyword2
End While
keyword = Asc(keyword) 'finds out ascii value of keyword
keyword2 = Asc(keyword2) 'finds out ascii value of keyword2
Console.ForegroundColor = ConsoleColor.Magenta
Console.WriteLine("here is your decrypted message")
ReDim Preserve encoded_message(0 To plain.Length - 1)
For stepper As Integer = 0 To plain.Length - 1
encoded_message(stepper) = Asc(plain(stepper)) - keyword - keyword2 + 96
Console.Write(Chr(encoded_message(stepper)))
Next
Console.ReadLine()
End Sub
它意味着通过将每个字母向下移动一定数量的字母来解密放入的单词。
答案 0 :(得分:0)
plain = Console.ReadLine
.ToUpper()
请勿转换输入文字的大小写。
keyword = Asc(keyword)'找出关键字的ascii值
keyword2 = Asc(keyword2)'找出keyword2的ascii值
删除/注释掉这两行。
encoded_message(stepper)= Asc(plain(stepper)) - 关键字 - keyword2 + 96
将其更改为:
encoded_message(stepper) = Asc(plain(stepper)) - Asc(keyword(stepper)) - Asc(keyword2(stepper)) + 128
这将纠正4个问题:
您将关键字转换为stepper
循环之外的ASCII,为每个关键字的每个值提供一个常量值,而不是另一个字母。
您正在将输入字符串转换为大写(“A”= 65),但在解密时使用小写的ASCII值(“a”= 97)。
构建encoded_message
数组时,只添加了一次ASCII /整数差异。由于您减去了两个字符,因此需要将其重新添加两次。
您转换了输入文本的大小写,但所使用的编码的性质意味着在某些情况下会改变结果。我修改后的代码仍假定原始消息在编码之前已转换为大写,但加密消息可能包含小写字母,因为小写字母具有比小写值更高的值,并通过添加值来加密消息。 (示例:带有关键字“Q”和“X”的消息“J”加密为“s”。)如果这不是您想要的行为(即,如果加密应该围绕“字母表,以便消息“J”与关键字“Q”和“X”加密为“Y”)然后代码将需要进一步编辑使用Mod运算符来找到正确的值。