使用C#实现Vigenere与Playfair加密算法
1. Vigenere算法
1.1 简介
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
1.2 代码实现
public class Vigenere
{
private char[][] alphabet;//字符表
public Vigenere()
{
alphabet =new char[26][];
char a = 'a';
for(int i = 0; i < 26; i++)
{
alphabet[i] = new char[26];
for (int j = 0; j < 26; j++)
{
alphabet[i][j] = Convert.ToChar(Convert.ToInt32(a) + (i+j)%26);
}
}
}
public string getAlphabet()
{
string str="";
for (int i = 0; i < alphabet.Length; i++)
{
for (int j = 0; j < alphabet[i].Length; j++)
{
str += alphabet[i][j] + " ";
}
str += "\n";
}
return str;
}
private char[] pretreatment(int p_num,string key)//预处理,统一长度
{
if (p_num == key.Length) return key.ToCharArray();//长度相等
else if (p_num < key.Length)//密钥长
{
char[] k = new char[p_num];
for (int i = 0; i < p_num; i++)
{
k[i] = key[i];
}
return k;
}
else//明文长
{
char[] k = new char[p_num];
for (int i = 0; i < p_num; i++)
{
k[i] = key[i%key.Length];
}
return k;
}
}
private int getIndexByLetter(char x)=> Convert.ToInt32(x) - Convert.ToInt32('a');//得到字符序列
private char getLetterByIndex(int x) => Convert.ToChar(Convert.To