记录学习python的基础学习2--敲一个维吉尼亚密码加密

首先必然得有维吉尼亚密码的储备知识

维吉尼亚密码是多表代替密码

举一个例子,明文是aaa,密钥是key(俺举的明文很特殊,是为了方便理解)

则密文就是key

即第一个明文字符对应到a\rightarrowk的表,第二个则是a\rightarrowe的表,依此可以理解第三个

如果明文比密钥大的话,例如aaaa,第四个应该用a\rightarrowk的表

反应到代码上配合ASCII码

就是密文=明文+密钥-A/a(A和a取决于整个的大小写问题)

def weijiniyaencode(str,key):#str和key应该同是大写字母或同是小写字母
    str_list=list(str)
    key_list=list(key)
    loop=len(key_list)
    k=0
    for i in range(len(str_list)):
        if loop==1:
            j=0
        else:
            j=k%loop
        if ord(str_list[i]) >= 65 and ord(str_list[i]) <= 90:#用来筛选大写字母
            if ord(str_list[i])+ord(key_list[j])-65>90:#考虑超出Z
                str_list[i] = chr(ord(str_list[i]) +ord(key_list[j]) -65-26)
            else:
                str_list[i] = chr(ord(str_list[i]) + ord(key_list[j])-65)
        elif ord(str_list[i]) >= 97 and ord(str_list[i]) <= 122:#用来筛选小写字母
            if ord(str_list[i])+ord(key_list[j])-97 >122:
                str_list[i] = chr(ord(str_list[i]) +ord( key_list[j])-97-26)
            else:
                str_list[i]= chr(ord(str_list[i]) + ord(key_list[j])-97)
        k+=1
    str_encode=''.join(str_list)
    return str_encode
if __name__ == '__main__':
    str1=weijiniyaencode('z  a','z')
    print(str1)

  • 19
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值