维吉尼亚密码加解密与破解

实验目的

1、进一步理解维吉尼亚密码的加解密原理
2、进一步理解维吉尼亚密码的缺陷和利用方法
3、提高编程实践能力

实验要求

1、实现维吉尼亚加解密函数
2、破解维吉尼亚加密的密文

实验步骤

1、维吉尼亚加密实现

维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。也就是说,维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
代码实现:

def encrypt (message,key):
    key = key.lower()
    non_alpha_count = 0
    cipher = ''
    for i in range(len(message)):
        if message[i].isalpha():
            if message[i].isupper():
                offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
                cipher +=chr(((ord(message[i])-ord('A')+offset) % 26) + ord('A'))
            if message[i].islower():
                offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
                cipher +=chr((ord(message[i])-ord('a')+offset) % 26 + ord('a'))
        else:
            cipher +=message[i]
            non_alpha_count +=1
    return cipher

我们来实现一个简单的加密:
在这里插入图片描述
结果如下:

在这里插入图片描述

2、维吉尼亚密码解密

解密的过程则与加密相反。例如:根据密钥第一个字母t所对应的t行字母表,发现密文第一个字母a位于h列,因而明文第一个字母为h。密钥第二个字母a对应a行字母表,而密文第二个字母e位于此行e列,因而明文第二个字母为e。以此类推便可得到明文。
代码实现:

def decrypt (message,key):
#    key = key.lower()
    non_alpha_count = 0
    cipher = ''
    for i in range(len(message)):
        if message[i].isalpha():
            if message[i].isupper():
                offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
                cipher +=chr(((ord(message[i])-ord('A')-offset) % 26) + ord('A'))
            if message[i].islower():
                offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
                cipher +=chr((ord(message[i])-ord('a')-offset) % 26 + ord('a'))
        else:
            cipher +=mess
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值