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:
print(ming)