介绍
小编给大家分享一下如何使用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实现维吉尼亚算法