Python实现维吉尼亚加解密

今天上课学习加密,一时兴起写成了脚本。  

# 处理密钥(这里还有优化空间)
def secret_key(CONTENT, KEY):
    # 获取空格位置
    i = 0
    blank = []
    while i != -1:
        i = CONTENT.find(" ", i + 1)
        blank.append(i)

    # 扩充key与明文长度相同
    while len(KEY) < len(CONTENT):
        for i in KEY:
            KEY += i
            if len(KEY) == len(CONTENT):
                # print(KEY)
                break

    # 在key中填充空格,使之与明文格式形同
    key_list = list(KEY)

    for i in blank[:-1]:
        key_list.insert(i, " ")
    k = "".join(key_list)
    # print(k)
    return k


def ead(CONTENT, KEY, way, data_e=""):
    k = secret_key(CONTENT, KEY)
    # 解密
    for i in range(len(CONTENT)):
        if CONTENT[i] != " ":
            star = ord(CONTENT[i])
            tran = ord(k[i]) - 97
            if way == 1:
                data_e += chr(star + tran) if star + tran <= 122 else chr(star + tran - 26)
            elif way == 2:
                data_e += chr(star - tran) if star - tran > 97 or star < 97 else chr(star - tran + 26)
        else:
            data_e += " "
    return data_e


def main():
    content = input()
    way = int(input("加密:1,解密:2:"))
    key = input("请输入密钥:")
    if way not in [1, 2]:
        print("输入有误!")
    else:
        print(ead(content, key, way))


if __name__ == '__main__':
    main()
 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值