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

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

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

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

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

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 !?.'
 # 根据数字 key 对字母表 symbols 进行偏移操作,形成密文字母表 ciphers
 ciphers = symbols[int(key):] + symbols[:int(key)]
 # 根据加密与解密动作,生成明文字母到密文字母(或密文到明文)的对应关系
 transtab = str.maketrans(symbols, ciphers) if mode == 'encrypt' else str.maketrans(ciphers, symbols)

 message = input("\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 !?.'

ciphertext = input("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?ku?o1?ugetgv?oguucigB
Key #12: Uijt!jt!nz!tfdsfu!nfttbhfA
Key #13: This is my secret message.
Key #14: Sghr0hr0lx0rdbqds0ldrrZfd?
Key #15: Rfgq9gq9kw9qcapcr9kcqqYec!
...

参考资料

Cracking Codes with Python

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

(0)

相关推荐

  • python 密码学示例——理解哈希(Hash)算法

    Hash 是密码学安全性的基石,它引入了单向函数(one-way function)和指纹(fingerprint)的概念.即: 对于任意输入,都可以产生相同的.唯一的输出值 输出值中不包含输入值的任何线索 一.保密性(confidentiality)与完整性(integrity) 简单来说,信息的保密性确保除授权人员以外的任何人都无法读取该消息,信息的完整性则确保除授权人员以外的任何人都无法修改该消息. 很多时候一段加密的消息无法被他人读取和理解(保密性),并不意味着该密文不会在传播过程中被截

  • 利用python实现凯撒密码加解密功能

    凯撒密码介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全.他的原理很简单,说到底就是字母于字母之间的替换. 实验目的 应用Python程序设计语言的相关知识,理解并实现凯撒密码加解密过程. 实验内容 任务1:运行import this, 观察代码运行结果:查看this.py源文件(可以在Python安装目录下的Lib文件夹下找到),分析它的原理. 任务2:实现凯撒密码加解密过程. 实验环境 Pyt

  • python如何随机生成高强度密码

    本文实例为大家分享了python随机生成高强度密码的具体代码,供大家参考,具体内容如下 import random import re # 字母类型 englishChar = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'l', 'k', 'j', 'h', 'g', 'f', 'd', 's', 'a', 'z', 'x', 'c', 'v', 'b', 'n', 'm'] # 数字类型 numberChar = ['1', '2',

  • python语言编程实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin************# message1=message.upper() #把明文字母变成大写 message1=list(message1) #将明文字符串转换成列表 list1=[] for i in range(len(message1)): if message1[i]==' ': lis

  • Python设计密码强度校验程序

    程序介绍 本程序利用 1.密码必须由数字.字母及特殊字符三种组合 2.密码只能由字母开头 3.密码长度不能低于16位 来判断密码程度. 首先,把可输入的字符写进去: symbols = r'''`!@#$%^&*()_+-=/*{}[]\|;:?/<>''' chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' nums = '0123456789' 然后开始循环并判断密码长度: while 1: print('-

  • Python实现的凯撒密码算法示例

    本文实例讲述了Python实现的凯撒密码算法.分享给大家供大家参考,具体如下: 一 介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全.他的原理很简单,说到底就是字母于字母之间的替换.下面让我们看一个简单的例子:"baidu"用凯撒密码法加密后字符串变为"edlgx",它的原理是什么呢?把"baidu"中的每一个字母按字母表顺序向后移3位,所得的结果

  • python 穷举指定长度的密码例子

    本程序可根据给定的字符字典,穷举指定长度的所有字符串: def get_pwd(str, num): if(num == 1): for x in str: yield x else: for x in str: for y in get_pwd(str, num-1): yield x+y strKey="abc" for x in get_pwd(strKey,3): print x 结果: aaa aab aac aba abb abc aca acb acc baa bab b

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

    凯撒密码 是密码学中的一种简单的 替换加密 技术.明文中的所有字符都会替换为其按照字母表顺序向左(或向右)偏移一定量后得到的新字母,作为加密后密文. 如当偏移量为 3 时,明文中所有的字母 A 将被替换成字母 D,B 替换成 E,以此类推. 若收到密文的同时已知加密时使用的偏移量,就可以快速地通过逆运算获取到最初的明文. 下面两张图展示了当偏移量为 8 时明文字母与密文字母的对应关系(图一即凯撒密码轮盘,外层为明文,内层为密文,可旋转以改变偏移量)以及实际的加密过程(图二): PS:对一段明文消

  • Python编程实现凯撒密码加密示例

    目录 一.什么是凯撒密码 二.python实现凯撒加密 一.什么是凯撒密码 "在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推.这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系." 关于凯撒密码的详细

  • Python密码学Caesar Cipher凯撒密码算法教程

    目录 凯撒密码算法 输出 说明 凯撒密码算法的黑客攻击 在最后一章中,我们处理了反向密码.本章详细讨论了凯撒密码. 凯撒密码算法 凯撒密码的算法具有以下特征; Caesar Cipher Technique是一种简单易用的加密技术方法. 这是一种简单的替换密码类型. 每个纯文本字母都被一个字母替换,字母的位数固定不变./p> 下图描绘了Caesar密码算法实现的工作原理 : Caesar密码算法的程序实现如下 : def encrypt(text,s): result = ""

  • python实现凯撒密码加密解密的示例代码

    凯撒加密就是通过将字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移,被替换成密文.例如,当偏移量是2的时候,所有的字母B将被替换成D,C变成E,以此类推Y将变成A,Z变成B.由此可见,偏移量就是凯撒密码加密和解密的密钥. 下面使用python代码来实现凯瑟密码的加密解密. import string def kaisa_jiami(s,k):     lower=string.ascii_lowercase#小写英文字母     upper=

  • python实现凯撒密码

    在密码学中,凯撒密码(或称恺撒加密.恺撒变换.变换加密)是一种最简单且最广为人知的加密技术.它是一种替换加密的技术.这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系.恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码.恺撒密码还在现代的ROT13系统中被应用.但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全. 尽管是最简单的加密技术,但那该怎么在python中如何现实呢? 代码如下: def ask(

  • python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin************# message1=message.upper() #把明文字母变成大写 message1=list(message1) #将明文字符串转换成列表 list1=[] for i in range(len(message1)): if message1[i]==' ': lis

  • 一文详解凯撒密码的原理及Python实现

    目录 一.什么是恺撒密码 二.程序运行环境 三.恺撒密码:加密 3.1 恺撒密码加密实例程序 3.2 恺撒密码加密实例程序运行结果 四.恺撒密码:解密 4.1 恺撒密码解密实例程序 4.2 恺撒密码解密实例程序运行结果 五.完整程序 六.总结 一.什么是恺撒密码 恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符: 原文:A B C D E F G H I J K L M N O P Q R S T U V W

随机推荐