生活随笔
收集整理的這篇文章主要介紹了
buu [GKCTF2020]小学生的密码学
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
查看題目
仿射密碼的代碼實現 破解代碼
#include <iostream>
#include<math.h>
#include<string.h>
using namespace std
;
int dx
, y
, q
;
void extend_Eulid(int aa
, int bb
)
{if (bb
== 0) {dx
= 1; y
= 0; q
= aa
;}else {extend_Eulid(bb
, aa
% bb
);int temp
= dx
;dx
= y
;y
= temp
- aa
/ bb
* y
;}
}
int main()
{int a
, b
, YN
, i
, l
;char c
[100];int x
[100];char ex
[100], y
[100];cout
<< "請依次輸入k =( a, b )的a, b值,其中 a,b ∈ Z/(26),gcd( a,26) = 1 :" << endl
;cin
>> a
>> b
;cout
<< "那么你的加密函數就是 ex = " << a
<< "*x + " << b
<< endl
;cout
<< endl
<< "接下來輸入你要加密的明文(小寫字母):" << endl
;cin
>> c
;l
= strlen(c
);for (i
= 0; i
< l
; i
++){x
[i
] = c
[i
] - 'a';ex
[i
] = (a
* x
[i
] + b
) % 26;}cout
<< "加密后的字母為:";for (i
= 0; i
< l
; i
++){cout
<< char(ex
[i
] + 'a');}cout
<< endl
<< endl
;cout
<< "是否要解密原文(輸入1則確定,輸入其他則取消):";cin
>> YN
;while (YN
== 1){extend_Eulid(a
, 26);dx
= (dx
+ 26) % 26;cout
<< dx
<<endl
;for (i
= 0; i
< l
; i
++){y
[i
] = (dx
* int(x
[i
]) - dx
* b
) % 26;y
[i
] = (y
[i
] + 26) % 26;cout
<< char(y
[i
]+ 'a' );}break;}}
總結
以上是生活随笔為你收集整理的buu [GKCTF2020]小学生的密码学的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。