凯撒加密法,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
通俗一点,就是把字母按照一个key(0~25)向前移动,解密的话反过来就行;
在线加密:https://www.qqxiuzi.cn/bianma/kaisamima.php
代码来源于:https://blog.csdn.net/by4_luminous/article/details/53343780
py脚本加密解密:
def change(c,i):
c = c.lower()
num = ord(c)
if num >= 97 and num <= 122:
num = 97 + ((num - 97) + i) % 26
return chr(num)
def kaisa_jiami(string,i):
string_new = ''
for s in string:
string_new += change(s,i)
print(string_new)
return string_new
def kaisa_jiemi(string):
for i in range(25):
print('\n', i, '\n')
i += 1
kaisa_jiami(string,i)
def main():
print('请选择需要的操作:')
print('1:凯撒加密')
print('2:凯撒解密')
choice = input()
if choice == '1':
string = input('请输入需要加密的字符串:')
num = int(input('请输入需要偏移的位数:'))
kaisa_jiami(string,num)
elif choice == '2':
string = input('请输入需要解密的字符串:')
kaisa_jiemi(string)
else:
print('输入错误,请重试!')
main()
if __name__ == '__main__':
main()
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
会有这么一张表格,根据一个密匙key(会自动重复填充至明文长度),来进行分字母移位:
例如密匙为:hello
对应的明文为:nihaoshijie
结果密文为:umslczltuwl
过程就是hello–》hellohelloh
然后:
h+n查表可得为u(即x轴为h,y轴为n)
在线加密解密:https://www.qqxiuzi.cn/bianma/weijiniyamima.php
代码来源于:https://blog.csdn.net/weixin_43028509/article/details/84667484
py代码加密:
a = input("请输入密匙,明文,以空格隔开:\n").split()
Plaintext = a[1]#明文
plalen = len(a[1])#明文长度
key = a[0]#密钥
keylen = len(a[0])#密钥长度
passward = ''
if plalen <= keylen:#如果明文长度小于密钥长度
for i in range(plalen):
k = 0
if key[i].islower():#如果密钥是小写
k = ord(key[i]) - ord('a')
else:
k = ord(key[i]) - ord('A')
temp = ord(Plaintext[i])+k#明文加上移动位数
if Plaintext[i].islower():#如果明文是小写
if temp > ord('z'):#如果移动位数大于z
passward += chr(temp - ord('z') + ord('a') - 1)
else:
passward += chr(temp)
else:
if temp > ord('Z'):
passward += chr(temp - ord('Z') + ord('A') - 1)
else:
passward += chr(temp)
else:
key1 = str(key * (plalen // keylen) + key[:plalen - len(key * (plalen // keylen))])
for i in range(plalen):
k = 0
if key1[i].islower():
k = ord(key1[i]) - ord('a')
else:
k = ord(key1[i]) - ord('A')
temp = ord(Plaintext[i]) + k
if Plaintext[i].islower():
if temp > ord('z'):
passward += chr(temp - ord('z') + ord('a') - 1)
else:
passward += chr(temp)
else:
if temp > ord('Z'):
passward += chr(temp - ord('Z') + ord('A') - 1)
else:
passward += chr(temp)
print(passward)