古典密碼(1)


摩斯密碼

1.替代密碼,必須有密碼本,加密時將加密的明文依次替換為密文

2.摩斯密碼一般都是“."”_"來表示,也有“0”,’1“,在對摩斯密碼加解密時,先確定分隔符,分隔符一般為空格,也可以為"/"

3.在用工具進行解密時,若遇到“0”,“1”,則要進行轉換,記事本→編輯→替換,隨機替換成“.","_",直至最終的解密結果順眼。

4.寫腳本時,要使密碼表內所含字符較多。

具體操作:(1)定義key的變量,把密碼字典賦值給它,用txt接收用戶輸入的數據,用strip去掉密文左右兩側的空格,用split作為分隔符。

                  (2)用get方法取字典中的值,因為若取得鍵在字典中不存在,會產生異常,而get不會產生異常,print(key.get(i),end=' ')

5.讓腳本既能解是"._"的密文,也能解"01"的密文

(1). table = ' '.maketrans('01','._')

txt.translate(table)

(2). table = ' '.maketrans('.-','01')

txt.translate(table)

(3). 列表不能用translate方法來轉換,此時對字符串不能分割,

先轉換為01或._再進行分割

if '.' in txt:

table = ' .maketrans('._','01')

txt = txt .translate(table).split()

else:

txt = txt.split()

(4).別忘了用split方法進行分割!! ! ! !

6.注意形式 flag{ }

凱撒密碼

1.把英文字母在字母表中向前或向后移相同的位數,且只對英文字母進行移位,數字,符號標點不變,字母大小寫不變,密鑰只有25種可能,即[0,25],最后找尋到最有實際意義的答案。

2.x代表明文,y代表密文,k代表密鑰

(1).加密:(x+k)%26 也可用mod求模

(2).解密:(y-k)%26

(3).負數取模: -4%26=22 即-4+26=22%26=22

3.chr(97+(ord(i)+n-97)%26) 中n為秘鑰。

使用ord(i)+n-97讓其位於[0,25]內,以便求余。

4.腳本上總體上要完成的要求

(1)區分大小寫

(2)如果不是大小寫,則原樣輸出

 (3)分析解出的明文是否含有flag,ctf,the,is,to,no,for等關鍵字

使用如下:key = ('flag','ctf','key','the','is','no','for')

for m in key:

if m in mi:

print(‘明文可能是: ',ming)

print( )

break

若用戶不需要程序推薦,則如下:

txt = input('請輸入密文: ').strip( )

n = input('您是否需要推薦明文(Y/N)').strip()

 

...................

 

if n.lower() =='y':

key = ('flag','ctf','key','the','is','no','for')

for m in key:

if m in mi:

print(‘明文可能是: ',ming)

print( )

break

elif n.lower() =='n':

print(ming)

print()

以防一個語句中因有多個關鍵字而多次輸出,故要運用 break

5.寫腳本時,區分大小寫,

for j in txt :

if j. is lower():

使用的表達式為chr(97+(ord(j)-i-97)%26)

elif j.isupper():

使用的表達式為chr(65+(ord(j)-i-65)%26)

6.一個絕絕子的方法:

運用替換方式

lower = 'abcdefghijklmnopqrstuvwxyz'

upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for i in range(1,26):                              此處定義了密鑰的范圍

xiao = lower[i:]+lower[:i]                       此處按照密鑰將字母順序進行了整體后移

da = upper[i:]+upper[:i]                        運用了切片

ming = ' '                                               起始定義為空字符串

table = ' '.maketrans(xiao+da,lower+upper)

for i in txt:

ming = ming + j.translate(table)

print(ming)

print( )


免責聲明!

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



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