凯撒加密以及维吉尼亚加密,解密,py代码

随声附和 提交于 2020-01-13 00:23:37

凯撒加密

凯撒加密法,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
通俗一点,就是把字母按照一个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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!