仿射密码加密算法

  算法简述:

   加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:

    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','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
            char[] t2 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            for (i = 0; i < k1.Length; i++)
            {
                Console.WriteLine("{0}", k1[i]);
            }

            Console.WriteLine("选择加密的系数 k1 :");
            j = int.Parse(Console.ReadLine());

            Console.WriteLine("输入加密参数 k2(0~25):");
            m = int.Parse(Console.ReadLine());

          
            for (int n = 0; n < str.Length; n++)
            {
                for (l = 0; l < t1.Length; l++)
                {
                    if (str[n] == t1[l])
                    {
                        b = (j * l + m) % 26;
                        str1[n] = t2[b];
                    }
                }
            }
           
            Console.WriteLine("加密所得的密文如下:");
            Console.WriteLine(str1);
            Console.ReadKey();

 

 

运行结果:

仿射密码加密算法_第1张图片

你可能感兴趣的:(仿射密码加密算法)