GKCTF2020-小學生的密碼學

打開題目,發現算法

 

呀,是個數學計算題,百度能夠知道這是個仿射加密,和凱撒密碼同樣,屬於「代換密碼」。app

它的加密算法爲: 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寫出數學式子,因此只能手寫啦)spa

 

而後,a的逆已經求出來了,那麼咱們寫個小小的腳本,把明文破譯出來code

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=" ")

運行結果:blog

 

 把答案 'sorcery' 用base64編碼提交就好啦!!!(其實這道題能夠直接經過在線網站解出來,不過,手動算一下,對於第一次接觸的我仍是很開心啦)數學

相關文章
相關標籤/搜索