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从数据库读取大量数据批量写入文件的方法
Dec 10 Python
Python脚本完成post接口测试的实例
Dec 17 Python
Python之时间和日期使用小结
Feb 14 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
简单介绍django提供的加密算法
Dec 18 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
用Python简陋模拟n阶魔方
Apr 17 Python
python基础学习之递归函数知识总结
May 26 Python
Python turtle实现贪吃蛇游戏
Jun 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
php xml文件操作代码(一)
2009/03/20 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
jquery连缀语法如何实现
2012/11/29 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
详解python eval函数的妙用
2017/11/16 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
营业经理岗位职责
2013/11/10 职场文书
办公室主任先进事迹
2014/01/18 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
实习护士自荐信
2015/03/25 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS