zoukankan      html  css  js  c++  java
  • GKCTF2020-小学生的密码学

    打开题目,发现

    呀,是个数学计算题,百度可以知道这是个仿射加密,和凯撒密码一样,属于“代换密码”。

    它的加密算法为: c = E(p)=(a*p+b) mod m    (其中p为明文,c为密文, 且a和m互质,m为字母的个数)

        解密算法为: p = D(c) = ((c-b)*(a的逆)) mod m (这里a的逆是指a在群空间m下的乘法逆元,可用扩展的欧几里得算法求出)

    在这道题中,我们已知了加密算法中的a和b,那么只要求出a的逆,这道题也就解出来啦!

    手动解法如下:(扩展的欧几里德算法,我是在b站上看的,up主为圆号本昊,讲的很详细!还有我不会用word写出数学式子,所以只能手写啦)

    然后,a的逆已经求出来了,那么我们写个小小的脚本,把明文破译出来

    x= 19
    text = 'welcylk'
    s=[]
    for i in text:
        m = ord(i)-97
        s.append(m)
    
    print(s)
    for num in s:
        n = ((num-6)*x) % 26 
        print(chr(n+97),end=" ")

    运行结果:

     把答案 'sorcery' 用base64编码提交就好啦!!!(其实这道题可以直接通过在线网站解出来,不过,手动算一下,对于第一次接触的我还是很开心啦)

  • 相关阅读:
    linux cpu load学习笔记
    P1064 金明的预算方案
    P1757 通天之分组背包
    P1352 没有上司的舞会
    P1651 塔
    P1250 种树
    P1938 [USACO09NOV]找工就业Job Hunt
    P4392 [BOI2007]Sound 静音问题
    P3884 [JLOI2009]二叉树问题
    P2880 [USACO07JAN]平衡的阵容Balanced Lineup
  • 原文地址:https://www.cnblogs.com/jane315/p/12995393.html
Copyright © 2011-2022 走看看