python实现维吉尼亚加密法


Posted in Python onMarch 20, 2019

本文实例为大家分享了python实现维吉尼亚加密法的具体代码,供大家参考,具体内容如下

Vigenere加密/解密时,把英文字母映射为0-25的数字再进行运算,并按n个字母为一组进行变换.算法定义如下:
设密钥 k =(k1,k2,k3…,kn),明文 m = (m1,m2,….mn),则加密算法为:
Ek(m) = (c1,c2,…cn)
其中:c1 = (mi+ki)(mod 26),i=1,2,3…..n
解密算法为:
mi = (ci - ki)(mod 26), i = 1,2,…..n。

import string,os

def   vigenereEncrypt(msg,key):
    size = len(key)
    result = []
    cnt = 0
    for i in msg:
      if i.upper() in string.uppercase:
        #offset相当于是 ki
        offset = string.uppercase.find(key[cnt%size])
        t = string.uppercase[(string.uppercase.find(i.upper())+offset)%26] #这里相当于是c1 = (mi+ki)(mod 26) ,t = c1
        if i.isupper():
          result.append(t)
        else:
          result.append(t.lower())
        cnt+=1
      else:
        result.append(i)
    return "".join(result)
def   main():

    msg = "Common sense is not so common"
    cipher = vigenereEncrypt(msg,"PIZZA")#key = "PIZZA:

    print cipher
if   __name__=="__main__":
    main()

python实现维吉尼亚加密法

小编再为大家分享一段Vigenere密码Python实现代码:

##########Vigenere密码############
 
letter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ' #字母表
 
#根据输入的key生成key列表
def Get_KeyList(key):
 key_list=[]
 for ch in key:
  key_list.append(ord(ch.upper())-65)
 return key_list
 
#加密函数
def Encrypt(plaintext,key_list):
 ciphertext=""
 
 i=0
 for ch in plaintext: #遍历明文
  if 0==i%len(key_list):
   i=0
  if ch.isalpha(): #明文是否为字母,如果是,则判断大小写,分别进行加密
   if ch.isupper(): 
    ciphertext+=letter_list[(ord(ch)-65+key_list[i]) % 26]
    i+=1
   else:
    ciphertext+=letter_list[(ord(ch)-97+key_list[i]) % 26].lower()
    i+=1
  else: #如果密文不为字母,直接添加到密文字符串里
   ciphertext+=ch
 return ciphertext
 
#解密函数
def Decrypt(ciphertext,key):
 plaintext=""
 
 i=0
 for ch in ciphertext: #遍历密文
  if 0==i%len(key_list):
   i=0
  if ch.isalpha(): #密文为否为字母,如果是,则判断大小写,分别进行解密
   if ch.isupper():
    plaintext+=letter_list[(ord(ch)-65-key_list[i]) % 26]
    i+=1
   else:
    plaintext+=letter_list[(ord(ch)-97-key_list[i]) % 26].lower()
    i+=1
  else: #如果密文不为字母,直接添加到明文字符串里
   plaintext+=ch
 return plaintext
 
if __name__=='__main__':
 print("加密请按D,解密请按E:")
 user_input=input();
 while(user_input!='D' and user_input!='E'):#输入合法性判断
  print("输入有误!请重新输入:")
  user_input=input()
 
 print("请输入密钥:")
 key=input()
 while(False==key.isalpha()):#输入合法性判断
  print("输入有误!密钥为字母,请重新输入:")
  key=input()
 
 key_list=Get_KeyList(key)
 
 if user_input=='D':
  #加密
  print("请输入明文:")
  plaintext=input()
  ciphertext=Encrypt(plaintext,key_list)
  print("密文为:\n%s" % ciphertext)
 else:
  #解密
  print("请输入密文:")
  ciphertext=input()
  plaintext=Decrypt(ciphertext,key_list)
  print("明文为:\n%s" % plaintext)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python创建文件和追加文件内容实例
Oct 21 Python
Python如何快速实现分布式任务
Jul 06 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
目前最全的python的就业方向
Jun 05 Python
numpy数组广播的机制
Jul 12 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
python Canny边缘检测算法的实现
Apr 24 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Pytorch之扩充tensor的操作
Mar 04 Python
Python实现自动玩连连看的脚本分享
Apr 04 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 #Python
python实现对输入的密文加密
Mar 20 #Python
python实现字符串加密成纯数字
Mar 19 #Python
python实现简单加密解密机制
Mar 19 #Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 #Python
python异步存储数据详解
Mar 19 #Python
利用Python半自动化生成Nessus报告的方法
Mar 19 #Python
You might like
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
PDO::query讲解
2019/01/29 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
pandas 小数位数 精度的处理方法
2018/06/09 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
保密工作责任书
2014/04/16 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
经济类毕业生求职信
2014/06/26 职场文书
七一建党日演讲稿
2014/09/05 职场文书
护士求职简历自我评价
2015/03/10 职场文书
党支部培养考察意见
2015/06/02 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android