脚本专栏 
首页 > 脚本专栏 > 浏览文章

python 密码学示例——凯撒密码的实现

(编辑:jimmy 日期: 2024/11/17 浏览:3 次 )

凯撒密码 是密码学中的一种简单的 替换加密 技术。明文中的所有字符都会替换为其按照字母表顺序向左(或向右)偏移一定量后得到的新字母,作为加密后密文。

如当偏移量为 3 时,明文中所有的字母 A 将被替换成字母 D,B 替换成 E,以此类推。

若收到密文的同时已知加密时使用的偏移量,就可以快速地通过逆运算获取到最初的明文。

下面两张图展示了当偏移量为 8 时明文字母与密文字母的对应关系(图一即凯撒密码轮盘,外层为明文,内层为密文,可旋转以改变偏移量)以及实际的加密过程(图二):

python 密码学示例——凯撒密码的实现

python 密码学示例——凯撒密码的实现

PS:对一段明文消息连续应用多个不同的偏移量进行凯撒密码规则的加密,并不会增强安全等级。即轮盘的多次旋转,实际上等同于抵消后的一次旋转。多次应用的不同偏移量,最终等同于抵消后的一次偏移量,对于暴力破解来说并不会增加复杂度。

如第一次对明文实施偏移 3 位的凯撒加密,再对生成的密文实施偏移 10 位的加密,实际上相当于对最初的明文实施了偏移 13 位的加密。

二、Python 实现凯撒密码

源代码:

while True:
 key = input("Please input a key number (like 13):\n") or 13
 mode = input("\nPlease input mode (encrypt or decrypt):\n") or "encrypt"

 symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"\nPlease input plaintext or ciphertext:\n")
 # 完成明文到密文(或密文到明文)的转换
 result = message.translate(transtab)
 print(f"\nThe result is: {result}\n\n")

运行效果如下:

Please input a key number (like 13):
13

Please input mode (encrypt or decrypt):
encrypt

Please input plaintext or ciphertext:
This is my secret message.

The result is: guv6Jv6Jz!J6rp5r7Jzr66ntrM

Please input a key number (like 13):
13

Please input mode (encrypt or decrypt):
decrypt

Please input plaintext or ciphertext:
guv6Jv6Jz!J6rp5r7Jzr66ntrM

The result is: This is my secret message.

三、Python 对凯撒密码的爆破

即在加密用的 key 值未知的情况下,尝试所有可能的 key 值(0 到字母表长度减一)对密文进行解密,输出以查看解密出的明文是否有意义。

源代码:

symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"Please input ciphertext:\n")


for key in range(len(symbols)):
 ciphers = symbols[key:] + symbols[:key]
 transtab = str.maketrans(ciphers, symbols)
 plaintext = ciphertext.translate(transtab)

 print(f'Key #{key}: {plaintext}')

运行效果如下:

Please input ciphertext:
guv6Jv6Jz!J6rp5r7Jzr66ntrM
Key #0: guv6Jv6Jz!J6rp5r7Jzr66ntrM
Key #1: ftu5Iu5Iy I5qo4q6Iyq55msqL
Key #2: est4Ht4Hx0H4pn3p5Hxp44lrpK
Key #3: drs3Gs3Gw9G3om2o4Gwo33kqoJ
Key #4: cqr2Fr2Fv8F2nl1n3Fvn22jpnI
Key #5: bpq1Eq1Eu7E1mkzm2Eum11iomH
Key #6: aopzDpzDt6Dzljyl1DtlzzhnlG
Key #7: ZnoyCoyCs5CykixkzCskyygmkF
Key #8: YmnxBnxBr4BxjhwjyBrjxxfljE
Key #9: XlmwAmwAq3AwigvixAqiwwekiD
Key #10: Wklv.lv.p2.vhfuhw.phvvdjhC
Key #11: Vjku"external nofollow" target="_blank" href="https://nostarch.com/crackingcodes">Cracking Codes with Python

以上就是python 密码学示例——凯撒密码的实现的详细内容,更多关于python 凯撒密码的资料请关注其它相关文章!

上一篇:Python如何在bool函数中取值
下一篇:python 密码学示例——理解哈希(Hash)算法
一句话新闻
Windows上运行安卓你用过了吗
在去年的5月23日,借助Intel Bridge Technology以及Intel Celadon两项技术的驱动,Intel为PC用户带来了Android On Windows(AOW)平台,并携手国内软件公司腾讯共同推出了腾讯应用宝电脑版,将Windows与安卓两大生态进行了融合,PC的使用体验随即被带入到了一个全新的阶段。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 SiteMap