单字母替换加密方法——单表置换密码C#假设密钥Key是BEIJINGTSINGHUA(北京清华),则由此密码构造的字符置换表为:B E I J N G T S H U A C DF K L M O P Q R V W X Y Z,则如果明文为“important” 则密文为:HDLKOQBFQ,代码要求可供用户选择加密或解密,用户可自行输入密钥
时间: 2024-02-19 10:57:20 浏览: 104
单表替换加密解密程序
4星 · 用户满意度95%
好的,我来回答你的问题。关于单表置换密码的加密和解密,我可以为你提供以下 C# 代码:
```csharp
using System;
namespace SingleTableSubstitutionCipher
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请选择操作:");
Console.WriteLine("1. 加密");
Console.WriteLine("2. 解密");
int choice = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密钥:");
string key = Console.ReadLine();
// 构造字符置换表
string table = "BEIJNGTSHUACDFKLMOPQRVWXYZ";
char[] substitutionTable = new char[26];
for (int i = 0; i < table.Length; i++)
{
substitutionTable[i] = table[i];
}
// 根据密钥重新排序字符置换表
for (int i = 0; i < key.Length; i++)
{
char c = key[i];
int index = table.IndexOf(c);
if (index >= 0)
{
substitutionTable[index] = (char)('A' + i);
}
}
if (choice == 1)
{
// 加密
Console.WriteLine("请输入明文:");
string plaintext = Console.ReadLine();
string ciphertext = Encrypt(plaintext, substitutionTable);
Console.WriteLine($"密文为:{ciphertext}");
}
else if (choice == 2)
{
// 解密
Console.WriteLine("请输入密文:");
string ciphertext = Console.ReadLine();
string plaintext = Decrypt(ciphertext, substitutionTable);
Console.WriteLine($"明文为:{plaintext}");
}
}
static string Encrypt(string plaintext, char[] substitutionTable)
{
string ciphertext = "";
foreach (char c in plaintext.ToUpper())
{
if (c >= 'A' && c <= 'Z')
{
int index = c - 'A';
ciphertext += substitutionTable[index];
}
}
return ciphertext;
}
static string Decrypt(string ciphertext, char[] substitutionTable)
{
string plaintext = "";
foreach (char c in ciphertext.ToUpper())
{
int index = Array.IndexOf(substitutionTable, c);
if (index >= 0)
{
plaintext += (char)('A' + index);
}
}
return plaintext;
}
}
}
```
这个程序可以让用户选择加密或解密操作,并输入密钥和明文/密文,然后输出对应的密文/明文。其中,`Encrypt` 和 `Decrypt` 函数分别实现了加密和解密的逻辑,其中使用了字符置换表来进行加密和解密操作。
阅读全文