[密码攻击] 仿射密码的攻击

713 0
Honkers 2025-9-16 09:26:54 | 显示全部楼层 |阅读模式

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

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

假设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++代码如下:

  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>
  4. #include<stdlib.h>
  5. using namespace std;
  6. /*
  7. 欧几里德算法
  8. */
  9. int gcd(int a,int b)
  10. {
  11. int temp;
  12. if(a<b)//判断大小
  13. {
  14. temp=a;
  15. a=b;
  16. b=temp;
  17. }
  18. if(b==0) return a;
  19. else return gcd(b,a%b);//递归
  20. }
  21. int main()
  22. {
  23. string List("abcdefghijklmnopqrstuvwxyz"),c("ojbkojbk"),result;
  24. int a,b,m,p;
  25. /*
  26. 加密:c = Ea,b(m) ≡ a, + b(mod 26)
  27. 解密:m = Da,b(c) ≡ a^-1(c - b)(mod 26)
  28. a,b是密钥 0<=a,b<=n,gcd(a,m)=1
  29. 逆元:a^-1*a≡1mod m
  30. */
  31. for(a=2;a<26;a++){
  32. //a和26互素
  33. if(gcd(a,26)==1){
  34. //求a的乘法逆元p
  35. for(b=2;b<26;b++){
  36. if((a*b)%26==1){
  37. p=b;break;
  38. }
  39. }
  40. //下面进行解密
  41. for(b = 0; b < 28; b++) // k2 = b<q
  42. {
  43. for(int i=0;i<c.size();i++){
  44. for(int k = 0; k < List.size(); k += 1){
  45. if(List[k] == c[i]) //得到密文所对应的密文数字
  46. {
  47. //string中文测试,因为编码和string类的原因,一个中文字符占两个下标
  48. // pp=pp+bi1[k] + bi1[k + 1];
  49. // cout<<pp<<endl;
  50. // printf("k:%d ",k);
  51. // printf("\n");
  52. m = (p * (k - b)) % 26; //得到密文数字相对应的明文数字
  53. //得到明文数字对应的明文
  54. if (m >= 0)
  55. {
  56. result = result + List[m] ;
  57. }
  58. else
  59. {
  60. m = m+ 26;
  61. result = result + List[m];
  62. }
  63. }
  64. }
  65. }
  66. printf ("当 a = %02d, b = %02d 时,解密得到的明文是: ", a, b);
  67. cout << result << endl;
  68. result.clear();
  69. }
  70. }
  71. }
  72. return 0;
  73. }
复制代码

 

三、运行结果

 

 

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行