如何在字母(凯撒密码)中增加字符串3个字母? [英] How to advance string 3 letters in the alphabet (Caesar cipher)?

查看:72
本文介绍了如何在字母(凯撒密码)中增加字符串3个字母?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个对用户提交的字符串进行加密的程序.我想使用一种加密技术,其中字符串在字母中高级3个字母.
例如: abc 将成为 def .
目前,我有一个TextBox( TextBox1 )和一个按钮( Button1 ).
到目前为止,我的代码:

I'm trying to make a program that encrypts a string the user submits. I want to use an encryption technique where the string is advanced 3 letters in the alphabet.
Example: abc would become def.
Currently I have a TextBox (TextBox1) and a Button (Button1).
My code so far:

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个字母.
我做错了什么?

The problem is that when I run it, it only outputs 1 letter.
What did I do wrong?

推荐答案

一个凯撒密码方法.接受正向和负向移位以及(可选)多个字母.
后者将使用不同于通常的US-ASCII的ASCII表进行测试.

A Caesar cipher method. Accepts positive and negative shifts and, optionally, a number of alphabet letters.
The latter, to be tested with ASCII tables different than the usual US-ASCII.

它不会更改数字(略过),但是您可以根据需要使用相同的模式进行修改.

It doesn't alter digits (skipped) but you can modify it using the same pattern, if needed.

使用 Scramble 参数选择加扰(True)或不加扰(False).

Use the Scramble parameter to select scramble (True) or unscramble (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

这篇关于如何在字母(凯撒密码)中增加字符串3个字母?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆