仿射密码的加密和解密,蛮力攻击C++实现
来源:互联网 发布:网络配线架有什么用 编辑:程序博客网 时间:2024/05/17 05:57
实现代码如下:
void exEuclidean(int a,int b,int &s,int &t){ int r1 = a, r2 = b , s1 = 1, s2 = 0, t1 = 0, t2 = 1;//初始化 int q,r; while(r2 > 0) { q = r1 / r2; r = r1 - q * r2; //也就是r = r1%r2; r1 = r2; r2 = r; s = s1 - q * s2; s1 = s2; s2 = s; t = t1 - q * t2; t1 = t2; t2 = t; } //gcd(a,b) = r1; s = s1; t = t1; } int findReverse(int a,int n){ //找出a关于n的乘法逆 int s,t; exEuclidean(n,a,s,t); //因为传引用,s和t得到解了 int a_ = (t >= 0) ? (t % n) : ((t-t*n)%n); //乘法逆就是t映射于n的值 return a_;}string encode(string text,int addKey,int mulKey){string password = "";for(int i = 0 ; i < text.size(); i++){int code = text[i] - 'a';password += (code * mulKey + addKey) % 26 + 'A';}return password;//得到密文 }string decode(string password,int addKey,int mulKey){string text = "";for(int i = 0 ; i < password.size(); i++){int code = password[i] - 'A';text += ( (code - addKey + 26) * findReverse(mulKey,26))% 26 + 'a';}return text;//得到密文 }int main(){ int addKey = 2 ,mulKey = 7;string s;cin>>s;string password = encode(s,addKey,mulKey);printf("得到密文:"); cout<<password<<endl;string text = decode(password,addKey,mulKey);printf("解码得到明文:"); cout<<text<<endl;//假设对于得到的密文进行密钥枚举的破解 printf("接下来演示蛮力攻击:\n"); printf("得到密文:PWUFFOGWCHFDWIWEJOUUNJORSMDWRHVCMWJUPVCCG\n枚举得到的明文如下:\n"); s.clear();s += "PWUFFOGWCHFDWIWEJOUUNJORSMDWRHVCMWJUPVCCG";int mul[12] = {1,3,5,7,9,11,15,17,19,21,23,25} ;//这12个元素有乘法逆 for(int i = 0 ; i < 10 ; i++){//枚举加法密钥 for(int j = 0 ; j < 12; j++){ //枚举乘法密钥 text = decode(s,i,mul[j]);cout<<text<<endl;}}}对于加法密钥为2,乘法密钥为7的字符串"hello"的加密结果为"ZEBBW"
蛮力攻击的枚举结果如下:
略去了一些无关的枚举结果,那么通过对于26*12种枚举结果,就有可能发现有意义的密文从而找到对应的2个密钥从而实现后续的窃听。
阅读全文
0 0
- 仿射密码的加密和解密,蛮力攻击C++实现
- 信息安全之仿射密码加密和解密
- mfc实现仿射和凯撒加密解密
- C#实现维吉尼亚密码的加密和解密
- 四种加密解密算法的源代码:移位密码、仿射密码、维吉尼亚密码以及置换密码
- 仿射密码解密
- oracle 密码的加密和解密
- 仿射密码加密
- 用C#实现Des加密和解密
- 用C#实现Des加密和解密
- C#实现Des加密和解密
- 用C#实现Des加密和解密
- 用C#实现Des加密和解密
- 用C语言实现移位密码加密与解密
- shiro 密码加密和解密
- BCrypt 密码加密和解密
- python实现仿射密码加解密过程
- 仿射密码加解密及暴力破解c++实现
- 二进制读写文件
- eclipse将jar放在WEB-INF/lib的字母时,出现ClassNotFoundException的解决方法
- C-定义
- C语言之指针
- Linux学习第十七篇--设置开机挂载和建立swap
- 仿射密码的加密和解密,蛮力攻击C++实现
- Java机器学习库ML之三Sampling(采样)
- VMWare中桥接、nat和主机模式的介绍与配置
- Python内置pip
- ubuntu创建用户
- cordova编译项目的时候遇到的问题一 Android Sdk not found
- Eclipse中Junit使用
- 关于Thread的关闭方法
- unity快捷键大全