2015-11-17 61 views
-1
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

平原=到Console.ReadLine .ToUpper()

不要轉換輸入文本的情況下。

關鍵字=升序(關鍵字) '發現關鍵字的ASCII值

關鍵字2 =升序(1關鍵字)' 發現的關鍵字2

刪除ASCII值/註釋這兩行。

encoded_message(步進)=升序(純(步進器)) - 關鍵字 - 關鍵字2 + 96

更改爲:

encoded_message(stepper) = Asc(plain(stepper)) - Asc(keyword(stepper)) - Asc(keyword2(stepper)) + 128 

這將正確的4個問題:

  1. 您正在將關鍵字轉換爲您的stepper循環外的ASCII,giv每個關鍵字的值不是一個不同的字母,而是每個值。

  2. 您將輸入字符串轉換爲大寫(「A」= 65),但在解密時使用小寫字母(「a」= 97)的ASCII值。

  3. 構建encoded_message數組時,只添加一次ASCII /整數差。既然你減去了兩個字符,你需要將它加回兩次。

  4. 您轉換了輸入文本的大小寫,但所用編碼的性質意味着在某些情況下會改變結果。我修改後的代碼仍然假設消息被轉換編碼之前爲大寫,但加密消息很可能會包含小寫字母,爲小寫字母比小寫的人更高的價值和該消息被添加值加密。 (例如:關鍵字「Q」和「X」的消息「J」加密爲「s」。)如果這不是您想要的行爲(即,如果加密應該圍繞字母表「循環」,以便消息「 J「,並將關鍵字」Q「和」X「加密爲」Y「),那麼代碼將需要進一步編輯爲使用Mod運算符來查找正確的值。

相關問題