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 json模块使用实例
Apr 11 Python
Python内置函数 next的具体使用方法
Nov 24 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
Python查找文件中包含中文的行方法
Dec 19 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
python缩进长度是否统一
Aug 02 Python
python如何对链表操作
Oct 10 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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入门
2007/01/04 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php多文件上传下载示例分享
2014/02/20 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
个人求职信范文分享
2013/12/13 职场文书
村长贪污检举信
2014/04/04 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
给老婆的保证书
2015/01/16 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
英语演讲开场白
2015/05/29 职场文书
反邪教教育心得体会
2016/01/15 职场文书
六年级作文之关于梦
2019/10/22 职场文书