算法简述:
加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:
C= Ek(m)=(k1m+k2) mod n
M= Dk(c)=k3(c- k2) mod n(其中(k3 ×k1)mod26 = 1)
仿射密码具有可逆性的条件是gcd(k1, n)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。
仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26 = 312。
主要代码如下:
int i,j,l,m,b;
char[] str1 = new char[80];
Console.WriteLine("请输入需要加密的明文:");
string str = Console.ReadLine();
int[] k1 = { 0, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 };
char[] t1 = { 'a','b','c','d','e','f','g','h','i','j','k','l','