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 23 Python
python正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python实现一个简单的验证码程序
Nov 03 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python 自动批量打开网页的示例
Feb 21 Python
django Admin文档生成器使用详解
Jul 22 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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
用libtemplate实现静态网页生成
2006/10/09 PHP
在Windows版的PHP中使用ADO
2006/10/09 PHP
php随机输出名人名言的代码
2012/10/07 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
Javascript Objects详解
2014/09/04 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
Python 如何访问外围作用域中的变量
2016/09/11 Python
python实现k-means聚类算法
2018/02/23 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Python 解析简单的XML数据
2020/07/24 Python
浅析python实现动态规划背包问题
2020/12/31 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
园林技术个人的自我评价
2014/02/15 职场文书
党员公开承诺书
2014/03/25 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书