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实现识别相似图片小结
Feb 22 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python如何获取apk的packagename和activity
Jan 10 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
Python操作Excel的学习笔记
Feb 18 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
JQuery小知识
2010/10/15 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
Python读大数据txt
2016/03/28 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
《尊严》教学反思
2014/02/11 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
2014年工人工作总结
2014/11/25 职场文书
英文导游词
2015/02/13 职场文书
宇宙与人观后感
2015/06/05 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
财产分割协议书
2016/03/22 职场文书