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編碼提交就好啦!!!(其實這道題可以直接通過在線網站解出來,不過,手動算一下,對於第一次接觸的我還是很開心啦)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM