Vigenere Decode

本文介绍了维吉尼亚密码的原理,这是一种多表代换密码,由16世纪的Vigenere发明。内容包括密码简介,详细阐述了加密和解密的过程,以及在无密钥情况下如何使用重合指数法破解维吉尼亚密码。最后,文章提供了利用Python实现维吉尼亚密码解密的代码示例。
摘要由CSDN通过智能技术生成
  • 正好利用完成作业的时间将VigenereCode看了一下,下面就讲解一下我自己所学到的东西吧。

1. 密码简介

Vigenenre密码是最著名的多表代换密码,是16世纪法国著名密码学家Vigenenre发明的。Vigenenre密码使用一个词组作为密钥,密钥中每一个字母用来确定一个代换表,每一个密钥字母被用来加密一个明文字母,第一个密钥字母加密第一个明文字母,第二个密钥字母加密第二个明文字母,等所有密钥字母使用完后,密钥再次循环使用,于是加解密前需先将明密文按照密钥长度进行分组。密码算法可表示如下:

设密钥K=(k1,k2,…,kd),明文M=(m1,m2,…,mn),密文C=(c1,c2,…,cn);

加密变换为:ci=Eki(mi)=mi+ki(mod 26)

解密变换为:mi=Dki(ci)=ci-ki(mod 26)

通常通过查询维吉尼亚表进行加解密。

明文:ATTACKATDAWN
密钥:LEMONLEMONLE
密文:LXFOPVEFRNHR
#!/usr/bin/python2
# -*- coding:utf-8 -*-
# 文件名:encode.py明文:ATTACKATDAWN 密钥:LEMONLEMONLE 密文:LXFOPVEFRNHR
string = raw_input("Plaintext:")
code = raw_input("code:")
sL=len(string)
sC=len(code)
def encode():
    result=''
    for i in range (0,sL):
        if ord(string[i])+ord(code[i%sC])-65<90:
            result+=chr(ord(string[i])+ord(code[i%sC])-65)
        else:
            result+=chr((ord(string[i])+ord(code[i%sC])-65)%91+65)
    return result
print encode()

2 密码破译

在一般知道密钥情况我就不说了直接写没有密钥的情况下怎么破解维吉尼亚加密

  • 找到密钥长度
def findKeyLen(codeText):#寻找密钥长度
    length = 0
    maxCount = 0
    for step in range(1,11):#假定密钥长度在1到10之间
        count = 0
        for i in range(0,len(codeText)-2*step):
            for j in range(0,2):
                if codeText[i+j] == codeText[i+step+j]:#两个一组进行匹配
                    count += 1

        print(count)
        if count>maxCount: #寻找并记录最大值
            maxCount = count
            length = step
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值