仿射密码的攻击

加法密码和乘法密码的结合就构成了仿射密码,仿射密码加密的思路为:首先将明文乘以密钥的一部分,然后再加上密钥的剩余部分。

一、仿射密码加密解密算法

假设c , m , a , b ∈Z26

加密:ek(m) ≡c ≡ a⋅m + b mod 26 

解密:dk(c) = m = a-1 ⋅(c-b) mod 26

 

密钥为:k =(a ,b ),且满足限制条件 gcd( a ,26)=1。a=1时,仿射密码变为加法密码,当b=0时,仿射密码变为乘法密码
解密可以很容易地从加密函数推导出来:

a ⋅ m  + b≡c mod 26
a ⋅ m≡ (c– b )mod 26
m ≡ a-1⋅ (c– b )mod 26

 

二、C++编程实现仿射密码的攻击

1.问题描述

仿射密码系统用五元组(P,C,K,E,D)表示,设P=C={abcdefghijklmnopqrstuvwxyz}.现在截获了一段密文“ojbkojbk”。请编程分析出明文。

2.C++代码如下:

#include 
#include 
#include 
#include

using namespace std;
/*
欧几里德算法
*/
int gcd(int a,int b)
{
    int temp;
    if(a= 0)
                             {
                                 result = result + List[m] ;
                             }
                             else
                             {
                                 m = m+ 26;
                                 result = result + List[m];
                             }
                         }
                     }
                }
                 printf ("当 a = %02d, b = %02d 时,解密得到的明文是:   ", a, b);
                 cout << result << endl;
                 result.clear();
           }
        }
    }
    return 0;
}

 

三、运行结果

 

仿射密码的攻击_第1张图片

 

 

你可能感兴趣的:(密码学,密码学,仿射密码,攻击,密码学,安全)