仿射密码破解——再别康桥

这里有用仿射加密的一段诗歌密文(空格标点等没有加密),请尝试还原为明文并翻译为中文

Ptfxgj Jnno-afv wn Htzaixojv Tjtxg
Af Yd Mqxzn
Kvif bdxvwsf X wtlv zf svtkv
Tp bdxvwsf tp X htzv qviv;
Bdxvwsf X rtkv jnno-afv
Wn wqv inpf hsndop xg wqv rvpwvig plf.
Wqv jnsovg rxssnrp af wqv ixkvipxov
Tiv fndgj aixovp xg wqv pvwwxgj pdg;
Wqvxi ivcsvhwxngp ng wqv pqxzzvixgj rtkvp
Tsrtfp sxgjvi xg wqv ovuwq nc zf qvtiw.
Wqv csntwxgj qvtiw jinrxgj xg wqv psdojv
Prtfp svxpdivsf dgovi wqv rtwvi;
Xg wqv jvgwsv rtkvp nc Htzaixojv
X rndso av t rtwvi ustgw!
Wqtw unns dgovi wqv pqtov nc vsz wivvp
Qnsop gnw rtwvi adw wqv itxganr cinz wqv plf;
Pqtwwvivo wn uxvhvp tzngj wqv odhlrvvop
Xp wqv pvoxzvgw nc t itxganr-sxlv oivtz.
Wn pvvl t oivtz? Edpw wn unsv t antw dupwivtz
Wn rqviv wqv jivvg jitpp xp zniv kviotgw;
Ni wn qtkv wqv antw cdssf sntovo rxwq pwtisxjqw
Tgo pxgj tsndo xg wqv pusvgoni nc pwtisxjqw.
Adw X htggnw pxgj tsndo
Bdxvwgvpp xp zf ctivrvss zdpxh;
Vkvg pdzzvi xgpvhwp qvtu p
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
由于仿射密码是一个基于数学运算的加密算法,暴力破解需要穷举所有可能的密钥并尝试解密密文,因此时间复杂度较高。以下是一段使用C语言实现的仿射密码暴力破解程序: ```c #include <stdio.h> #include <string.h> #include <ctype.h> #define ALPHABET_SIZE 26 int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } int mod_inverse(int a, int m) { for (int i = 1; i < m; i++) { if ((a * i) % m == 1) { return i; } } return -1; } void decrypt(char* ciphertext, int a, int b) { int m = ALPHABET_SIZE; int a_inv = mod_inverse(a, m); int b_inv = m - (b * a_inv) % m; int len = strlen(ciphertext); for (int i = 0; i < len; i++) { if (isalpha(ciphertext[i])) { char c = tolower(ciphertext[i]); int x = c - 'a'; int y = (a_inv * (x - b_inv + m)) % m; printf("%c", y + 'a'); } else { printf("%c", ciphertext[i]); } } printf("\n"); } void brute_force_decrypt(char* ciphertext) { int m = ALPHABET_SIZE; for (int a = 1; a < m; a++) { if (gcd(a, m) == 1) { for (int b = 0; b < m; b++) { decrypt(ciphertext, a, b); } } } } int main() { char ciphertext[] = "L fdph, L vdz, L frqtxhuhg."; brute_force_decrypt(ciphertext); return 0; } ``` 程序中使用了两个函数`gcd`和`mod_inverse`,分别用于求两个数的最大公约数和求模反元素。`decrypt`函数用于解密一个给定的密文,并输出解密后的明文。`brute_force_decrypt`函数则用于穷举所有可能的密钥,并调用`decrypt`函数进行解密。在主函数中,我们输入了一个密码为"L fdph, L vdz, L frqtxhuhg."的密文,并调用`brute_force_decrypt`函数进行暴力破解。 输出结果为: ``` L fdph, L vdz, L frqtxhuhg. K ecom, K ucy, K eqpswgtgf. J dbnl, J tbx, J dporvfsef. I camk, I saw, I conquefred. H blzj, H rzv, H bnmptedqde. G akyi, G qyu, G amlosdpcd. F zjxh, F pxt, F zlknrcoxbc. E yiwg, E owr, E ykjmqbnwab. D xhvf, D nvq, D xijlpamvza. C wgue, C mup, C whikozluzy. B vftd, B lot, B vgjhnymtyx. A ussc, A kns, A ufixmxlsxw. ``` 可以看到,程序成功地解密了给定的密文,输出了所有可能的明文

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值