Как продвинуть строку 3 буквы в алфавите (Цезарь шифр)? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать программу, которая шифрует строку, которую отправляет пользователь. Я хочу использовать технику шифрования, где строка состоит из 3 букв в алфавите.
Пример: abc станет def.
В настоящее время у меня есть TextBox (TextBox1) и кнопка (Button1).
Мой код пока:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim rawText As String
    rawText = TextBox1.Text
    Dim letterTxt As String = Chr(Asc(rawText) + 3)
    MsgBox(letterTxt)

End Sub

Проблема в том, что когда я запускаю его, он выводит только 1 букву.
Что я сделал не так?

1 Ответ

0 голосов
/ 15 ноября 2018

A Цезарь, шифр метод. Принимает положительные и отрицательные сдвиги и, необязательно, несколько букв алфавита.
Последний должен быть протестирован с таблицами ASCII, отличными от обычных US-ASCII.

Он не изменяет цифры (пропущено), но вы можете изменить его, используя тот же шаблон, если это необходимо.

Используйте параметр Scramble, чтобы выбрать шифрование (True) или дешифрование (False).

Пример тестового кода:

Dim Scrambled1 As String = CaesarCipher("ABCXYZabcxyz", 3, True)
Dim Scrambled2 As String = CaesarCipher("ABCXYZabcxyz", -5, True)

'Scrambled1 is now DEFABCdefabc
'Scrambled2 is now VWXSTUvwxstu

Dim Unscrambled As String = CaesarCipher(Scrambled2, -5, false)

'Unscrambled is now ABCXYZabcxyz

Function CaesarCipher(Input As String, CaesarShift As Integer, Scramble As Boolean, Optional AlphabetLetters As Integer = 26) As String

    Dim CharValue As Integer
    Dim MinValue As Integer = AscW("A"c)
    Dim MaxValue As Integer = AscW("Z"c)
    Dim ScrambleMode As Integer = If((Scramble), 1, -1)
    Dim output As StringBuilder = New StringBuilder(Input.Length)

    If Math.Abs(CaesarShift) >= AlphabetLetters Then
        CaesarShift = (AlphabetLetters * Math.Sign(CaesarShift)) - Math.Sign(CaesarShift)
    End If

    For Each c As Char In Input
        CharValue = AscW(c)
        If Not Char.IsNumber(c) Then
            CharValue = CharValue + (CaesarShift * ScrambleMode) Mod AlphabetLetters
            CharValue = If(AscW(Char.ToUpper(c)) + (CaesarShift * ScrambleMode) > MaxValue, CharValue - AlphabetLetters, CharValue)
            CharValue = If(AscW(Char.ToUpper(c)) + (CaesarShift * ScrambleMode) < MinValue, CharValue + AlphabetLetters, CharValue)
        End If
        output.Append(ChrW(CharValue))
    Next
    Return output.ToString()
End Function
...