包括凯撒密码中的所有可打印字符(ascii 32-126)
Include all printable characters in caesar cipher (ascii 32-126)
我正在寻找包含常见 ASCII 可打印字符(字符代码 32-126)的凯撒密码。
我当前的代码:
private static char Cipher(char ch, int key)
{
if (!char.IsLetter(ch))
return ch;
char offset = char.IsUpper(ch) ? 'A' : 'a';
return (char)((((ch + key) - offset) % 26) + offset);
}
public static string Encipher(string input, int key)
{
string output = string.Empty;
foreach (char ch in input)
output += Cipher(ch, key);
return output;
}
public static string Decipher(string input, int key) {return Encipher(input, 26 - key);}
(来源:https://www.programmingalgorithms.com/algorithm/caesar-cipher/)
我想我至少需要改变
if (!char.IsLetter(ch)) *and* return Encipher(input, 26 - key);
到
if (char.IsControl(ch)) *and* return Encipher(input, 94 - key);
并将模数 26 更改为 94(?) 但还需要做什么?我假设随机数生成器(这是一次性一密实现)也需要更改为 0-93(或者 ??)。然而,测试这给了我错误并且没有使输出与输入相同。也许我还需要进行 isLetter 检查,因此 isUpper 检查不会因非字母而失败。我还缺少什么?
private static char Cipher(char ch, int key)
{
if (char.IsControl(ch))
return ch;
char offset = ' ';
return (char)((((ch + key) - offset) % 95) + offset);
}
public static string Encipher(string input, int key)
{
string output = string.Empty;
foreach (char ch in input)
output += Cipher(ch, key);
return output;
}
public static string Decipher(string input, int key)
{
return Encipher(input, 95 - key);
}
我正在寻找包含常见 ASCII 可打印字符(字符代码 32-126)的凯撒密码。
我当前的代码:
private static char Cipher(char ch, int key)
{
if (!char.IsLetter(ch))
return ch;
char offset = char.IsUpper(ch) ? 'A' : 'a';
return (char)((((ch + key) - offset) % 26) + offset);
}
public static string Encipher(string input, int key)
{
string output = string.Empty;
foreach (char ch in input)
output += Cipher(ch, key);
return output;
}
public static string Decipher(string input, int key) {return Encipher(input, 26 - key);}
(来源:https://www.programmingalgorithms.com/algorithm/caesar-cipher/)
我想我至少需要改变
if (!char.IsLetter(ch)) *and* return Encipher(input, 26 - key);
到
if (char.IsControl(ch)) *and* return Encipher(input, 94 - key);
并将模数 26 更改为 94(?) 但还需要做什么?我假设随机数生成器(这是一次性一密实现)也需要更改为 0-93(或者
private static char Cipher(char ch, int key)
{
if (char.IsControl(ch))
return ch;
char offset = ' ';
return (char)((((ch + key) - offset) % 95) + offset);
}
public static string Encipher(string input, int key)
{
string output = string.Empty;
foreach (char ch in input)
output += Cipher(ch, key);
return output;
}
public static string Decipher(string input, int key)
{
return Encipher(input, 95 - key);
}