古典密码(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