欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

buu [GKCTF2020]小学生的密码学

发布时间:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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;//+26取正cout << char(y[i]+ 'a' );}break;}}

总结

以上是生活随笔为你收集整理的buu [GKCTF2020]小学生的密码学的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。