单字母替换加密方法——单表置换密码C#代码,给定的n位密钥替换字母表前n位(若有重复只记第一次),后面的按照字母表顺不重复的排列构成26位替换表,用户可选择加密解密,可自行输入密钥
时间: 2024-02-22 07:57:31 浏览: 99
以下是单字母替换加密方法——单表置换密码的 C# 代码实现,包括加密和解密两个方法:
```csharp
using System;
using System.Linq;
namespace SubstitutionCipher
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请选择操作:1.加密 2.解密");
int choice = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密钥:");
string key = Console.ReadLine();
if (choice == 1)
{
Console.WriteLine("请输入明文:");
string plainText = Console.ReadLine();
string cipherText = Encrypt(plainText, key);
Console.WriteLine("密文为:" + cipherText);
}
else if (choice == 2)
{
Console.WriteLine("请输入密文:");
string cipherText = Console.ReadLine();
string plainText = Decrypt(cipherText, key);
Console.WriteLine("明文为:" + plainText);
}
else
{
Console.WriteLine("无效的选择");
}
}
static string Encrypt(string plainText, string key)
{
char[] keyArray = key.Distinct().ToArray();
int n = keyArray.Length;
char[] cipherTable = new char[26];
for (int i = 0; i < n; i++)
{
cipherTable[i] = keyArray[i];
}
for (int i = 0, j = n; i < 26; i++)
{
if (!cipherTable.Contains((char)('A' + i)))
{
cipherTable[j++] = (char)('A' + i);
}
}
char[] plainTextArray = plainText.ToCharArray();
for (int i = 0; i < plainTextArray.Length; i++)
{
if (char.IsLetter(plainTextArray[i]))
{
if (char.IsUpper(plainTextArray[i]))
{
plainTextArray[i] = cipherTable[plainTextArray[i] - 'A'];
}
else
{
plainTextArray[i] = char.ToLower(cipherTable[char.ToUpper(plainTextArray[i]) - 'A']);
}
}
}
return new string(plainTextArray);
}
static string Decrypt(string cipherText, string key)
{
char[] keyArray = key.Distinct().ToArray();
int n = keyArray.Length;
char[] cipherTable = new char[26];
for (int i = 0; i < n; i++)
{
cipherTable[i] = keyArray[i];
}
for (int i = 0, j = n; i < 26; i++)
{
if (!cipherTable.Contains((char)('A' + i)))
{
cipherTable[j++] = (char)('A' + i);
}
}
char[] cipherTextArray = cipherText.ToCharArray();
for (int i = 0; i < cipherTextArray.Length; i++)
{
if (char.IsLetter(cipherTextArray[i]))
{
if (char.IsUpper(cipherTextArray[i]))
{
cipherTextArray[i] = (char)('A' + Array.IndexOf(cipherTable, cipherTextArray[i]));
}
else
{
cipherTextArray[i] = char.ToLower((char)('A' + Array.IndexOf(cipherTable, char.ToUpper(cipherTextArray[i]))));
}
}
}
return new string(cipherTextArray);
}
}
}
```
在程序中,我们首先让用户选择加密或解密操作,并输入密钥。然后,根据密钥生成替换表,并对输入的明文或密文进行加密或解密。
加密和解密的过程基本相同,都是通过生成替换表将明文或密文中的字母逐一替换为替换表中的字母。在替换过程中,我们需要注意大小写字母的处理。
阅读全文