古典密码-python实现维吉尼亚密码

def secret():         #加密过程
    str= input("请输入明文:")
    str_list = list(str)
    k_list = [x for x in input("请输入密钥流:").split()] #输入密钥流,以空格为间隔
    #print(k_list)

    for i in range(len(str_list)):    #判断输入密钥为数字或者大小写字母
        a = i % len(k_list)
        if k_list[a].isdigit():
            k = int(k_list[a])
        elif 64 < ord(str_list[a]) < 91:
            k = ord(k_list[a]) - ord('A')
        elif 96 < ord(k_list[a]) < 123:
            k = ord(k_list[a]) - ord('a')
        else:
            print("非法字符")
            break

        if(96 < ord(str_list[i]) < 123 ):
            str_list[i] = chr((ord(str_list[i]) - ord('a') + k) % 26 + ord('a'))
        elif(64 < ord(str_list[i]) < 91 ):
            str_list[i] = chr((ord(str_list[i]) - ord('A') + k)% 26 + ord('A'))
        else:
            str_list[i] = str_list[i]
    for i in range(len(str_list)):
        print(str_list[i],end="")
    print(" ")

def deciphering():       #解密过程
    str= input("请输入密文:")
    str_list = list(str)
    k_list = [x for x in input("请输入密钥流:").split()] #输入密钥流,以空格为间隔
    #print(k_list)

    for i in range(len(str_list)):   #判断输入密钥为数字或者大小写字母
        a = i % len(k_list)
        if k_list[a].isdigit():
            k = int(k_list[a])
        elif 96 < ord(k_list[a]) < 123:
            k = ord(k_list[a])-ord('a')
        elif 64 < ord(str_list[a]) < 91:
            k = ord(k_list[a]) - ord('A')
        else:
            print("非法字符")
            break

        if 96 < ord(str_list[i]) < 123:
            str_list[i] = chr((ord(str_list[i]) - ord('a') - k + 26) % 26 + ord('a'))
        elif 64 < ord(str_list[i]) < 91:
            str_list[i] = chr((ord(str_list[i]) - ord('A') - k + 26) % 26 + ord('A'))
        else:
            str_list[i] = str_list[i]
    for i in range(len(str_list)):
        print(str_list[i],end="")
    print(" ")
#主函数
control = 'Y'
while control == 'Y':
    moudle = input("加密输入s,解密输入d:")
    if moudle == 's':
        secret()  #加密
        control = input("继续操作输入Y,退出输入N:")
    elif moudle == 'd':
        deciphering()  #解密
        control = input("继续操作输入Y,退出输入N:")
    else:
        print("输出错误!")
        control = input("继续操作输入Y,退出输入N:")

你可能感兴趣的:(密码学,python)