我怎样才能纠正这个双关键字解密?

时间:2015-11-17 10:25:10

标签: vb.net

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

它意味着通过将每个字母向下移动一定数量的字母来解密放入的单词。

1 个答案:

答案 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个问题:

  1. 您将关键字转换为stepper循环之外的ASCII,为每个关键字的每个值提供一个常量值,而不是另一个字母。

  2. 您正在将输入字符串转换为大写(“A”= 65),但在解密时使用小写的ASCII值(“a”= 97)。

  3. 构建encoded_message数组时,只添加了一次ASCII /整数差异。由于您减去了两个字符,因此需要将其重新添加两次。

  4. 您转换了输入文本的大小写,但所使用的编码的性质意味着在某些情况下会改变结果。我修改后的代码仍假定原始消息在编码之前已转换为大写,但加密消息可能包含小写字母,因为小写字母具有比小写值更高的值,并通过添加值来加密消息。 (示例:带有关键字“Q”和“X”的消息“J”加密为“s”。)如果这不是您想要的行为(即,如果加密应该围绕“字母表,以便消息“J”与关键字“Q”和“X”加密为“Y”)然后代码将需要进一步编辑使用Mod运算符来找到正确的值。