维吉尼亚密码的Python实现

代换密码体制的一般定义为M=C=K=Z26,其中M为明文空间、C为密文空间、K为密钥空间、Z26为26个整数(对应26个英文字母)组成的空间;要求26个字母与模26的剩余类集合{0,1,2,…,25}建立一一对应的关系。

1移位密码

移位密码的加密实现上就是将26个英文字母向后循环移动k位,其加解密可分别表示为:

c=Ek(m)=m+k(mod 26)

m=Dk(c)=c-k(mod 26)

其中,m、c、k是满足0≤m,c,k≤25的整数。

2、维吉尼亚密码

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)

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

以下为维吉尼亚密码的Python实现。


 1 #-*-coding:utf-8-*-
 2 #维吉尼亚
 3
 4 ‘‘‘
 5 fileName : main.py
 6 ‘‘‘
 7
 8 import VigenereEncrypto
 9 import VigenereDecrypto
10
11 print u"维吉尼亚加密"
12
13 plainText = raw_input ("Please input the plainText : ")
14 key = raw_input ("Please input the key : ")
15
16 plainTextToCipherText = VigenereEncrypto (plainText , key)
17 print u"加密后得到的暗文是 : " + plainTextToCipherText
18
19 print u"维吉尼亚解密"
20
21 cipherText = raw_input ("Please input the cipherText : ")
22 key = raw_input ("Please input the key : ")
23
24 cipherTextToPlainText = VigenereDecrypto (cipherText , key)25 print u"解密后得到的明文是 : " + cipherTextToPlainText

 1 #-*-coding:utf-8-*-
 2 #维吉尼亚加密
 3
 4 ‘‘‘
 5 fileName : VigenereEncrypto.py
 6 ‘‘‘
 7
 8 def VigenereEncrypto (input , key) :
 9     ptLen = len(input)
10     keyLen =  len(key)
11
12     quotient = ptLen // keyLen    #商
13     remainder = ptLen % keyLen    #余
14
15     out = ""
16
17     for i in range (0 , quotient) :
18         for j in range (0 , keyLen) :
19             c = int((ord(input[i*keyLen+j]) - ord(‘a‘) + ord(key[j]) - ord(‘a‘)) % 26 + ord(‘a‘))
20             #global output
21             out += chr (c)
22
23     for i in range (0 , remainder) :
24         c =  int((ord(input[quotient*keyLen+i]) - ord(‘a‘) + ord(key[i]) - ord(‘a‘)) % 26 + ord(‘a‘))
25         #global output
26         out += chr (c)
27
28     return out

 1 #-*-coding:utf-8-*-
 2 #维吉尼亚解密
 3
 4 ‘‘‘
 5 fileName : VigenereDecrypto.py
 6 ‘‘‘
 7
 8 def VigenereDecrypto (output , key) :
 9     ptLen = len (output)
10     keyLen = len (key)
11
12     quotien = ptLen // keyLen
13     remainder = ptLen % keyLen
14
15     inp = ""
16
17     for i in range (0 , quotient) :
18         for j in range (0 , keyLen) :
19             c = int((ord(output[i*keyLen+j]) - ord(‘a‘) + 26 - (ord(key[j]) - ord(‘a‘)) % 26 + ord(‘a‘)))
20             #global input
21             inp += chr (c)
22
23     for i in range (0 , remainder) :
24         c = int((ord(output[quotient*keyLen + i]) - ord(‘a‘) + 26 - (ord(key[i]) - ord(‘a‘)) % 26 + ord(‘a‘)))
25         #global input
26         inp += chr (c)
27
28     return inp


运行结果:

时间: 2024-08-05 10:25:02

维吉尼亚密码的Python实现的相关文章

python编写的维吉尼亚密码加解密程序

维吉尼亚密码表 ============================================= #维吉尼亚密码  加密 key='helloworld' plaintext='whereisthekey' #key='relations' #plaintext='tobeornottobeth' ascii='abcdefghijklmnopqrstuvwxyz' keylen=len(key) ptlen=len(plaintext) ciphertext = '' i = 0 w

维吉尼亚密码加密、解密算法(破解还不会);

#include <iostream> #include<cstdio> using namespace std; void init_pass_table(char (&code_table)[27][27]){//制密码对照表;(不能当做一维数组来看会有别的问题) code_table[0][0]='0'; for(int i=0;i<26;i++){ code_table[0][1+i]='a'+i; } for(int i=0;i<26;i++){ co

py3实现维吉尼亚加解密

实 验 目 的 1.  熟悉和掌握替代加密算法的原理及其一般过程: 2.掌握对称加密算法的基本方法:维吉尼亚密码 3.掌握使用一定的编码开发工具(对具体的开发平台和工具不作要求). 实 验 环 境   Python3+pycharm 实 验 步 骤 1.   维吉尼亚原理分析 Vigenenre 密码使用一个词组作为密钥,密钥中每一个字母用来确定一个代换表, 每一个密钥字母被用来加密一个明文字母,第一个密钥字母加密第一个明文字母, 第二个密钥字母加密第二个明文字母,等所有密钥字母使用完后,密钥再

Vigen&#232;re Cipher 维吉尼亚加解密算法

维吉尼亚的加解密有两种方法. 第一种是查表:第一行为明文,第一列为密钥,剩余的为对应的密文 第二种方法是转化计算法:逐个将字符转化为从零开始的数字,对数字进行加密/解密后,再转化为字符. 本文要用c++实现第二种方法,并且为了操作方便,使用了MFC框架(附工程下载) 核心代码如下: //cipher.h 额外添加的文件,用来放置相关算法,此文件独立于MFC外,可直接移植到支持CString的项目中 int* CStringToInt(CString str){ //将CString转换为zero

python实现维吉尼亚解密

# -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXRGUD DKOTFMBPVGEGLTGCKQRACQCWDNAWCRXIZAKFTLEWRPTYCQKYVXCHKFTPONCQQRHJVAJUWETMCMSPKQDYHJVDAHCTRLSVSKCGCZQQDZXGSFRLSWCWSJTBHAFSIASPRJAHKJRJUMVGKMITZHFPDISPZLV

信息安全--维吉利亚密码

说明: 这个可以直接看这个解释: 如果你要对自己的男(女)神用维密(不是维多利亚的秘密)表白,先写好明文: I LOVE YOU 然后自己设定一个密钥,比如:KISS.这样密钥与明文对应就是 K ISSK ISS I LOVE YOU 对第一个字母 "I" 加密过程如下: 先找到最左侧密钥 K 所在的一行和最上方明文 I 所在列,找到他们的相交字母 S ,这样 I 就被加密成了 S .同理,这句话通过每一个对应密钥的加密后就变成如下 密钥:KISSKISS 明文:ILOVEYOU 密文

运维的我要学开发--Python(3)

本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示. #-*- coding: utf-8 -*- ''' 检查一个文本是字符串还是二进制 思想:如果字符串中包含了空值或者其中含有超过30%的字符 的高位被置1或是奇怪的控制码,我们就人为这段数据是二进制数据 ''' from __future__ import division import string #所

运维的我要学开发--Python(4)

本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示. #-*- coding: utf-8 -*- ''' 文件相关的操作: read() open() 两个参数: 第一个:文件路径 第二个:打开文件的模式 常用的文件打开模式: r:文本模式读取 rb:二进制模式读取 w:创建文件并文本模式 wb:创建文件,二进制模式写 rU:通用换行符的文本模式读取文件(独立

Windows服务器Pyton辅助运维--03.安装Visual Studio 的 Python 开发插件 PTVS

PTVS (Python Tools for Visual Studio) http://pytools.codeplex.com/ 当前版本:2.1 RC PTVS (Python Tools for Visual Studio) 是一个开源项目,采用Apache 2.0许可发布.PTVS的主要特性包括:CPython.IronPython.Jython和PyPy:高级编辑功能如IntelliSense:多重构:内置REPL(read-eval-print loop)窗口:调试和分析功能,等等