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执行外部程序的常用方法小结
Mar 21 Python
python使用线程封装的一个简单定时器类实例
May 16 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
python实现接口并发测试脚本
Jun 25 Python
linux环境中没有网络怎么下载python
Jul 07 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Django中提示消息messages的设置方式
Nov 15 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 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(7) php 字符串相关应用
2010/03/05 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
详解supervisor使用教程
2017/11/21 Python
python 实现多维数组转向量
2019/11/30 Python
学python最电脑配置有要求么
2020/07/05 Python
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
思想政治教育专业个人求职信范文
2013/12/20 职场文书
高二历史教学反思
2014/01/25 职场文书
经典安踏广告词
2014/03/21 职场文书
协议书格式
2014/04/23 职场文书
预备党员公开承诺书
2014/05/28 职场文书
营销团队口号
2014/06/06 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
党员三严三实心得体会
2014/10/13 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
灵魂歌王观后感
2015/06/17 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python