2015-02-28 1 views
-1

Я пытаюсь написать программу шифрования. Проблема, с которой я сталкиваюсь, заключается в том, что я конвертирую текст в ascii, а затем добавляю смещение. Однако, когда она проходит мимо буквы «z», я хочу, чтобы она вернулась к «а» и ушла оттуда.Как получить Ascii для деформации до определенного значения после того, как прошло 122?

Sub enc() 

    Text = TextBox1.Text 
    finalmessage = "" 
    letters = Text.ToCharArray 
    offset = ComboBox1.SelectedItem 

    For x = LBound(letters) To UBound(letters) 
     finalmessage = finalmessage + Chr(Asc(letters(x)) + offset) 
    Next 

    TextBox2.Text = finalmessage 

End Sub 
+0

Это было бы трудно декодировать тогда? : D как вы узнаете, сколько раз вы отступили? ascii имеет 255 кодов и вы хотите использовать только до Z? вам придется конвертировать в стиле base64, сначала преобразовать его в биты, а затем разбить на нужный диапазон. – Icepickle

+0

@Icepickle ASCII имеет 128 символов, пронумерованных от 0 до 127. Строка .NET ('TextBox1.Text') имеет юникодные/UTF-16 кодовые единицы. (PadLeft 8 в вашем ответе должен быть 16). –

ответ

0

Я думаю, чтобы сделать его легко расшифровать потом, вы должны к нему несколько в линии кодирования base64, первый кодирующий все к нормализованной двоичной строки, затем закодировать в диапазоне вы хотите (с использованием бинарного, это должно быть то, что соответствует 2^X).

Чтобы соответствовать диапазону, я использовал baseset из 32, и простого кодирования декодирования примера (немного более многословный, что она должна быть, возможно)

Module Module1 

    Dim encodeChars As String = "abcdefghijklmnopqrstuvwxyzABCDEF" ' use 32 as a base 

    Function Encode(text As String) As String 
     Dim bitEncoded As String = "" 
     Dim outputMessage As String = "" 
     For Each ch As Char In text.ToCharArray() 
      Dim i As Integer = Convert.ToByte(ch) 
      bitEncoded &= Convert.ToString(i, 2).PadLeft(8, "0"c) 
     Next 

     While bitEncoded.Length Mod 5 <> 0 
      bitEncoded &= "0" 
     End While 

     For position As Integer = 0 To bitEncoded.Length - 1 Step 5 
      Dim range As String = bitEncoded.Substring(position, 5) 
      Dim index As Integer = Convert.ToInt32(range, 2) 

      outputMessage &= encodeChars(index).ToString() 
     Next 

     Return outputMessage 
    End Function 

    Function Decode(encodedText As String) As String 
     Dim bitEncoded As String = "" 
     Dim outputMessage As String = "" 

     For Each ch In encodedText 
      Dim index As Integer = encodeChars.IndexOf(ch) 
      If index < 0 Then 
       Throw New FormatException("Invalid character in encodedText!") 
      End If 
      bitEncoded &= Convert.ToString(index, 2).PadLeft(5, "0"c) 
     Next 

     ' strip the extra 0's 
     While bitEncoded.Length Mod 8 <> 0 
      bitEncoded = bitEncoded.Substring(0, bitEncoded.Length - 1) 
     End While 

     For position As Integer = 0 To bitEncoded.Length - 1 Step 8 
      Dim range As String = bitEncoded.Substring(position, 8) 
      Dim index As Integer = Convert.ToInt32(range, 2) 

      outputMessage &= Chr(index).ToString() 
     Next 

     Return outputMessage 
    End Function 

    Sub Main() 

     Dim textToEncode As String = "This is a small test, with some special characters! Just testing..." 
     Dim encodedText As String = Encode(textToEncode) 
     Dim decodedText As String = Decode(encodedText) 

     Console.WriteLine(textToEncode) 
     Console.WriteLine(encodedText) 
     Console.WriteLine(decodedText) 

     If Not String.Equals(decodedText, textToEncode) Then 
      Console.WriteLine("Encoding/decoding failed!") 
     Else 
      Console.WriteLine("Encoding/decoding completed succesfully!") 
     End If 
     Console.ReadLine() 
    End Sub 

End Module 

это даст вам следующий вывод?

This is a small test, with some special characters! Just testing... 
krugsCzanfzsayjaonwwcBdmebAgkCBufqqhoAlunaqhgBBnmuqhgCdfmnuwcBbamnugcCtbmnAgkCtteeqeuDltoqqhizltoruwCzzofyxa 
This is a small test, with some special characters! Just testing... 
Encoding/decoding completed succesfully!