我得到以下代码来加密字符串。
private void Crypt(int n, int m, int d)
{
n = Convert.ToInt32(n);
m = Convert.ToInt32(m);
d = Convert.ToInt32(d);
// make a block from the string
string invoerstring = invoer.Text;
int stringlength = invoerstring.Length;
var blok = invoer.Text.PadRight(stringlength, ' ').Substring(0, stringlength);
// the letters are shifted d times
char [] buf = invoerstring.ToArray<char>();
foreach (char c in buf)
{
var letter = uitvoer.Text += (char)( c + (char)d);
}
// shift characters inside a block
var shift = String.Concat(invoerstring.Skip(m).Concat(invoerstring.Take(m)));
uitvoer.Text = shift;
}
private void button1_Click(object sender, EventArgs e)
{
Crypt(8,2,1);
}
private void clearbutton_Click(object sender, EventArgs e)
{
invoer.Text = "";
uitvoer.Text = "";
}
}
}
这是练习的解释:
- 加密 nmd 文本
- 文本用空格填充,直到它的长度是 n 的倍数
- 文本中的字符在字母表中循环移位 d
- 例如:如果 d = 1 那么 'a' -> 'b' , 'b' -> 'c' .... 等等... 'z' -> 'a'
- 文本被分成长度为 n 个字符的块
- 在 n 的每个块内,字符循环向左移动 m 次
- 移位的组被连接起来
当我运行我的代码时,字母不会移动 d 次。例如字符串:“aap noot mies”必须更改为“q oppubbjft n”(当 Crypt 是 Crypt(8,2,1) 时)。我需要改变什么才能得到这个结果?