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中的文本处理
Apr 11 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
Django多数据库的实现过程详解
Aug 01 Python
python sorted方法和列表使用解析
Nov 18 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
python实现拼接图片
Mar 23 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
python数据分析之用sklearn预测糖尿病
Apr 22 Python
Python打包为exe详细教程
May 18 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
php新建文件自动编号的思路与实现
2011/06/27 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
如何利用Fabric自动化你的任务
2016/10/20 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python实现画出e指数函数的图像
2019/11/21 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
python-地图可视化组件folium的操作
2020/12/14 Python
新大陆软件面试题
2016/11/24 面试题
计算机应用专业毕业生求职信
2014/06/03 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
流动人口婚育证明
2014/10/19 职场文书
工伤私了协议书范本
2014/11/24 职场文书
会计主管岗位职责
2015/04/02 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS