凯撒加密算法的python实现

凯撒加密算法的python实现

1.什么是凯撒加密算法

恺撒密码(英语:Caesar cipher)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

2. 加密方法

**
恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,…,Z=25。此时偏移量为n的加密方法即为:
在这里插入图片描述
解密方法:
在这里插入图片描述

3.python实现

恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移5的时候(解密时的密钥就是5):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ ;
密文字母表:FGHIJKLMNOPQRSTUVWXYZABCDE。
密文建立过程,需要将明文字母表中每个字母进行加密形成密文字母表,即取出每个字母的元素和下标K1,将K1-密钥,如果大于零,K2为下标-密钥,反之则为26+(K1-密钥),并对应于空密文字母表中的K2位置,并将取出的元素加到空密文字母表的K2位置上,建立密文字母表。
使用时,将明文字母表进行对应,即可得到密文

4.python代码实现如下:

#建立加密字典、解密字典
def function (key):
	#创建明文字母表
	invented_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	secret_emplty = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #建立空的密文字母表
	invented_tuple = tuple(list(invented_chars))  #将字符串形成元组
	#建立加密之后的密文字母表
	for i, j in enumerate(invented_tuple):
		if i - key <0 :
			a = (i - key) + 26
			secret_emplty[a] = j
		else:
			a = i - key
			secret_emplty[a] = j
	print(secret_emplty)    #建立完成密文字母表,输出查看
	encryption_dict = dict(zip(invented_tuple,secret_emplty))  #建立加密字典
	decryption_dict = dict(zip(secret_emplty,invented_tuple))  #建立解密字典
	return encryption_dict, decryption_dict
#生成密文
def encrypt(information,**encryption):
	info = tuple(list(information))	  #消息字母的处理
	secret = [] #建空密文
	#加密
	for letter in info:
		for letter_encrypt,value_encrypt in encryption.items():
			if letter == letter_encrypt:
				secret.append(value_encrypt)
	return secret
#解密
def decrypt(secret,**decryption):
	information_solve = []  #建立空明文
	for letter in secret:
		for letter_decrypt,value_encrypt in decryption.items():
			if letter == letter_decrypt:
				information_solve.append(value_encrypt)
	return information_solve
if __name__ == '__main__':
	key = eval(input("请输入密钥:"))
	information = input("请输入消息:")
	encryption,decryption = function(key)
	secret = encrypt(information,**encryption)   #加密
	print(secret)
	information_solve = decrypt(secret,**decryption)  #解密
	print(information_solve)

运行代码如下:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值