基于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
您可能感兴趣
- pythonweb大数据分析(Python实现的大数据分析操作系统日志功能示例)
- python列表中的数组(Python3.4学习笔记之列表、数组操作示例)
- python排序方法简单(快速排序的四种python实现推荐)
- 未来10年python前景(Python应用领域和就业形势分析总结)
- pythonlambda是什么函数(Python之lambda匿名函数及map和filter的用法)
- python获取天气源(Python3爬虫之自动查询天气并实现语音播报)
- python弹跳小球(python GUI实现小球满屏乱跑效果)
- pythonftp功能介绍(使用Python操作FTP实现上传和下载的方法)
- python list基本操作(Python3中列表list合并的四种方法)
- python调用elasticsearch(Python-ElasticSearch搜索查询的讲解)
- Python实现合并两个有序链表的方法示例(Python实现合并两个有序链表的方法示例)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- python能把时间转化成毫秒级吗(python 获取毫秒数,计算调用时长的方法)
- python3.9.1如何安装模块(Python3.6中Twisted模块安装的问题与解决)
- python批量注册(python实现批量注册网站用户的示例)
- 怎么查看python的安装路径(查看python安装路径及pip安装的包列表及路径)
- 魔兽争霸3自定义战役少年杰雷 2(魔兽争霸3自定义战役少年杰雷)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
- 今日菜价 红三鱼涨幅最高 4.41 ,黄鳝降幅最高 5.06(红三鱼涨幅最高)
- 今日菜价 西生菜涨幅最高 6.19 ,生菜降幅最高 5.38(西生菜涨幅最高)
- 今日菜价 青豆角涨幅最高 0.70 ,菜心降幅最高 5.55(青豆角涨幅最高)
热门推荐
- 如何通过广域网访问ftp服务器(Serv-u 外网访问内网的FTP服务器实现方法)
- servu权限设置(Serv-U防溢出提权攻击解决设置方法)
- 云服务器弹性体现在哪些方面(云服务器的性能表现在哪些方面?)
- docker部署mysql多实例(Docker部署mysql一主一从的操作方法)
- mysql事务未提交会锁表吗(Mysql事务中Update是否会锁表?)
- rel=nofollow的作用
- apache服务器的安全配置(Apache常用虚拟主机配置方法解析)
- 哪些行为会让面试失败
- ubuntu安装php(在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法)
- myeclipse连接mysql数据库的方法(教你用eclipse连接mysql数据库)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9