如何使用python实现维吉尼亚算法

  介绍

小编给大家分享一下如何使用python实现维吉尼亚算法,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强> 1维吉尼亚加密算法,解密算法

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

密码算法可表示如下:。

设明文串为:

M=m1m2…mn, mi∈字符集,n是明文长度

秘钥为:

K=k1k2…kd, ki∈字符集,d是秘钥长度

密文为:

C=c1c2…cn, ci∈字符集,n是密文长度

加密算法:

cj + td=(乔丹+ td + kj)国防部26日

j d=1…,,t=0…上限(n/d) 1

其中上限(x)函数表示不小于x最小整数

解密算法:

乔丹+ td=(cj + td kj)国防部26日

j=1…d, t=0…上限(n/d) 1

其中上限(x)函数表示不小于x最小整数

加解密代码如下

def  VigenereEncrypto(消息,键):=,msLen , len(消息)=,keyLen , len(关键)=,,message  message.upper ()=,,key  key.upper ()=,raw “ABCDEFGHIJKLMNOPQRSTUVWXYZ" #,明文空间   ,#定义加密后的字符串=,ciphertext ““   ,#开始加密   ,for 小姐:拷贝范围(0,,msLen):   #才能,轮询关键的字符   j 才能=,小姐:% keyLen   #才能,判断字符是否为英文字符,不是则直接向后面追加且继续   if 才能;消息[我],not 拷贝生:   ,,ciphertext  +=,消息[我]   ,才能继续   encodechr 才能=,空空的((奥德(消息[我]),安康;奥德(“A"), +,奥德(关键[j]),安康;奥德(“A")), %, 26, +,奥德(“A"))   #,才能追加字符   ciphertext 才能+=encodechr   ,#返回加密后的字符串   return 密文   if  __name__ ==,“__main__":   ,message =,,你好,,世界!“=,key “key"=,,text  VigenereEncrypto(消息,键)   ,打印(文本)   def  VigenereDecrypto(密文,关键):=,msLen , len(密文)=,keyLen , len(关键)=,,key  key.upper ()=,raw “ABCDEFGHIJKLMNOPQRSTUVWXYZ" #,密文空间=,plaintext ““   ,for 小姐:拷贝范围(0,,msLen): #,开始解密   #才能,轮询关键的字符   j 才能=,小姐:% keyLen   #才能,判断字符是否为英文字符,不是则直接向后面追加且继续   if 才能密文[我],not 生:拷贝   ,,plaintext  +=,密文[我]   ,才能继续   decodechr 才能=,空空的((奥德(密文[我]),安康;奥德(“A"),安康;奥德(关键[j]),安康;奥德(“A")), %, 26, +,奥德(“A"))   #,才能追加字符   plaintext 才能+=decodechr   ,#返回加密后的字符串   return 明文   if  __name__==癬_main__":=,ciphertext “RIJVS,, AMBPB !“=,key “key"=,,text  VigenereDecrypto(密文,键)   ,打印(文本)   import  VigenereDecrypto   import  VigenereEncrypto   def  main ():=,info  & # 39; & # 39; & # 39;==========* * * * * * * *==========& # 39; & # 39; & # 39; #,开始加密   ,打印(信息,“\ n - - - - - -维吉尼亚加密算法- - - - - -“)   ,打印(信息)   ,#读取测试文本文档=,message 开放(“test.txt",“r +“) .read ()   ,打印(“读取测试文本文档:test.txt")   ,打印(“开始加密!“)   ,#输入的关键=,key 输入(“请输入密钥:“)   ,#进入加密算法=,,CipherText  VigenereEncrypto.VigenereEncrypto(消息,键)   ,#写入密文文本文档=,C 开放(“CipherText.txt",,“w +“)   ,C.write(密文)   ,C.close ()   ,打印(“加密后得到的密文是:,\ n", +,密文)   ,#开始解密   ,打印(信息,“\ n - - - - - -维吉尼亚解密算法- - - - - -“)   ,打印(信息)   ,#读取加密文本文档   ,打印(“读取密文文本文档:CipherText.txt")=,Ciphertext 开放(“CipherText.txt",,“r +“) .read ()   ,#进入解密算法   ,打印(“开始解密!“)=,,Plaintext  VigenereDecrypto.VigenereDecrypto(密文,键)=,P 开放(“PlainText.txt",,“w +“)   ,#写入解密文本文档   ,P.write(明文)   ,P.close ()   ,打印(“解密后得到的明文是,:,\ n", +,明文)   if  __name__==癬_main__":   之前,main ()

如何使用python实现维吉尼亚算法