基于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
您可能感兴趣
- ubuntu python3.7安装(详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本)
- python字符串分析总结(Python 存储字符串时节省空间的方法)
- 用python3.5.3实现邮件收发(Python使用POP3和SMTP协议收发邮件的示例代码)
- python实例之pyqt5多窗口实现(python+pyqt5编写md5生成器)
- python抖音视频收集(python制作抖音代码舞)
- 图解python轻松快速掌握(10招!看骨灰级Pythoner玩转Python的方法)
- python time模块记录时间(Python Datetime模块和Calendar模块用法实例分析)
- pythonmysql使用教程(Python异步操作MySQL示例使用aiomysql)
- python复杂的验证码处理(Python 通过打码平台实现验证码的实现)
- python列表反转的方法(Python实现的列表排序、反转操作示例)
- pythonmatplotlib怎么用(Python matplotlib画图与中文设置操作实例分析)
- python怎么设计gui界面(详解python做UI界面的方法)
- python中lambda函数是什么意思(python ---lambda匿名函数介绍)
- python基本运算符编程(对Python3 * 和 ** 运算符详解)
- python爬取数据总结(python3爬虫学习之数据存储txt的案例详解)
- 如何查看python beautifulsoup(Python爬虫beautifulsoup4常用的解析方法总结)
- 小说 顾瑾岚拿出一套飞行棋,别说你连飞行棋都不会哦(顾瑾岚拿出一套飞行棋)
- 金品公司 界界乐中秋限定飞行棋礼盒 露营藤篮礼盒全新上市(界界乐中秋限定飞行棋礼盒)
- 必看 8月,相比七夕,更需要注意的是这些事(必看8月相比七夕)
- 8月23日11时16分将迎处暑,逐渐进入气象意义上的秋天(8月23日11时16分将迎处暑)
- 花不语 下 如果重来一次的话,你还会这么选择吗(花不语下如果重来一次的话)
- 城市记忆之上海 最难忘的是老弄堂里的市井味道(城市记忆之上海)
热门推荐
- dedecms标签使用(DEDECMS 自动缩略图无法生成问题的解决方法)
- html5基本结构图解(html5简介及新增功能介绍)
- js实现分页
- laravel关联查询限制数量(laravel-admin 后台表格筛选设置默认的查询日期方法)
- docker的一些使用方法(使用Docker 安装 Jenkins的方法)
- docker 清除none镜像(删除docker images中为none的镜像操作)
- python排序方法简单(快速排序的四种python实现推荐)
- 微信公众号文章 爬虫(python抓取搜狗微信公众号文章)
- zabbix5.4监控磁盘可用内存大小(解析Zabbix 5.0磁盘自动发现和读写监控的问题)
- js网站前端效果(JS如何让你的移动端交互体验更加优秀)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9