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之print详解
Sep 28 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
python实现事件驱动
Nov 21 Python
python实现感知器算法(批处理)
Jan 18 Python
python使用selenium实现批量文件下载
Mar 11 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
如何使用Django Admin管理后台导入CSV
Nov 06 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 Python
python中的装饰器该如何使用
Jun 18 Python
python实现简单石头剪刀布游戏
Oct 24 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中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
pymysql模块的操作实例
2019/12/17 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
小学后勤管理制度
2014/01/14 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
公证委托书格式
2014/09/13 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
逃课检讨书范文
2015/05/06 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
初中数学教学反思范文
2016/02/17 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
python实现监听键盘
2021/04/26 Python
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Java Socket实现多人聊天系统
2021/07/15 Java/Android
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技