基于python的加密算法(python实现维吉尼亚加密法)
类别:脚本大全 浏览量:1738
时间:2022-01-17 01:38:05 基于python的加密算法
python实现维吉尼亚加密法本文实例为大家分享了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() |
小编再为大家分享一段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) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/CosmopolitanMe/article/details/79498403
您可能感兴趣
- python3第三方库手册(使用python3构建文件传输的方法)
- python四舍五入怎么用(python3 小数位的四舍五入用两种方法解决round 遇5不进)
- python微信红包代码(php生成微信红包数组的方法)
- opencv 图像匹配python(OpenCV+Python识别车牌和字符分割的实现)
- python创建列表并查询(python列表使用实现名字管理系统)
- python栈和队列(Python 实现数据结构中的栈队列)
- python初学者必备函数(Python小白必备的8个最常用的内置函数推荐)
- python实现网络爬虫的步骤(Python实现的爬取小说爬虫功能示例)
- python什么是深拷贝什么是浅拷贝(Python深拷贝与浅拷贝用法实例分析)
- python实现七个基本算法(python实现维吉尼亚算法)
- python selenium用法详解(python selenium执行所有测试用例并生成报告的方法)
- python中return 类的实例(Python实现Event回调机制的方法)
- pythonopencv自定义阈值算法(理想高通滤波实现Python opencv示例)
- python用指针合并两个有序数组(Python3实现计算两个数组的交集算法示例)
- python有哪几种赋值(关于python多重赋值的小问题)
- python最简单实例(Python文件打开方式实例详解a、a+、r+、w+区别)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
热门推荐
- docker 清除none镜像(删除docker images中为none的镜像操作)
- html5div例子(html5 外链式实现加减乘除的代码)
- html5input标签的默认属性(移动端HTML5 input常见问题小结)
- vmware能安装macos吗(VMware15/16解锁VMware安装MacOS的步骤详解)
- php调试用什么工具好(调试php程序的简单步骤)
- vue中什么时候需要set属性(Vue.set和this.$set使用和区别)
- js RegExp用法
- 腾讯云开启所有端口(腾讯云端口怎么设置?腾讯云CVM开启端口图文教程)
- js如何操作json字符串
- 阿里云ECS实例中部署的Web网站运行速度慢的解决方法(阿里云ECS实例中部署的Web网站运行速度慢的解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9