最近在学密码学,作业里面的加密解密看得脑壳疼,刚好寒假自学了一些python,第一反应就是用python帮我加解密。

菜菜的我写了好久,刚写完,然后同学告诉我维吉尼亚密码有专门的加密解密的库,我一下就震惊加无语了。但是还是要发在这里让大家看看吧。注意,加密和解密的密钥是同一个,所以一次运行最好只去加密或者解密。

如果有bug或者可以改进的地方,欢迎评论发表哈。

import stringdef encrypt(Plain, Key):print('加密的密文为:', end='')count = 0  # 计数器,如果遇到标点或者空格加1,在Key中减计数器for i in range(len(Plain)):if Plain[i] not in (string.punctuation + ' '):Plain_i = ord(Plain[i])  # 明文中第i个字符的asciiKey_i = ord(Key[(i - count) % len(Key)])  # 密钥中对应个字符的asciiChar = enascii_turn(Plain_i, Key_i)print(Char, end='')  # ord(字母)转asciielse:print(Plain[i], end='')count += 1def decrypt(cipher, Key):  # 大写转大写,小写转小写print('')print('解密的明文为:', end='')count = 0for i in range(len(cipher)):if cipher[i] not in (string.punctuation + ' '):cipher_i = ord(cipher[i])Key_i = ord(Key[(i - count) % len(Key)])Char = deascii_turn(cipher_i, Key_i)print(Char, end='')else:print(cipher[i], end='')count += 1def keep(num):  # 单个字母ascii转换if num - 96 > 0:return num - 97else:return num - 65def enascii_turn(num1, num2):  # 加密ascii码转换if num1 > 96:num1 = ((keep(num1) + keep(num2)) % 26) + 97return chr(num1)  # chr(数字)转字母else:num1 = ((keep(num1) + keep(num2)) % 26) + 65return chr(num1)def deascii_turn(num1, num2):  # 解密ascii码转换if num1 > 96:num1 = ((keep(num1) - keep(num2)) % 26) + 97return chr(num1)else:num1 = ((keep(num1) - keep(num2)) % 26) + 65return chr(num1)def main():Plaintext = input("请输入明文")Key = input("请输入密钥")ciphertext = input("请输入密文")ciphertext = ' '.join(ciphertext.split())  # 多个空格转换:先split分成列表,再。join转换成字符串.‘ ’间隔一个空格encrypt(Plaintext, Key)decrypt(ciphertext, Key)main()

例如题目:已知下列密文是通过维吉尼亚密码加密得来的, 试求其明文。

Per zlrracm, vxmcs r qipqlczhs. Qs fcv rihw sxx hblrxh sm nkidhvzphw. Ixxvn qsn, lysh sifecs uui jrrfyg, mk xj suvc kd ss wbrzrrz uqh jpp zyw qv ylgn osfz fin isi bpgyoj, fg dm zdqzap, cl sifecs qks cdfy iu xyxey iu tipp zcni dt. Sin lj nt rfy jszcx hi jik iyfixky iysmh hzuwwwxpk izayv; mw lv olh kfxeu nr gitrhy d afgcr qkiit vjyucsdum bdw kwv cjssiilbcwc kd wwhg e ads, ohg ewuffx fscavuy; lj nt rfy jszcx hi vemt kvy hrmxichpiei rbx giwtrh zxxlgv duqhvbzqm, wlvc ns uui xdzba ws ypms nr hf xk hijikwvf.

由不知名手段获得密钥(求助万能的同学)为:prouder

解密后:And finally, build a community. No one does big things by themselves. Right now, when people are scared, it is easy to be cynical and say let me just look out for myself, or my family, or people who look or think or pray like me. But if we are going to get through these difficult times; if we are going to create a world where everybody has the opportunity to find a job, and afford college; if we are going to save the environment and defeat future pandemics, then we are going to have to do it together.

python 维吉尼亚密码加密和解密相关推荐

  1. 维吉尼亚密码加密/解密在线工具

    维吉尼亚密码加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=856 维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移 ...

  2. python编写加密程序_python编写的维吉尼亚密码加解密程序

    维吉尼亚密码表 ============================================= #维吉尼亚密码 加密 key='helloworld' plaintext='whereis ...

  3. 维吉尼亚密码 php,python小脚本之维吉尼亚密码

    维吉尼亚作为古典密码,本身的加解密并不是很难,因此也就有了这篇文章~ 下面初步解释下维吉尼亚密码的加密原理,假设现在有明文'a',加密密钥为'b',然后我们参照上面的维吉尼亚密码表进行加密,在a行的b ...

  4. RSA算法与维吉尼亚密码

    RSA算法 RSA算法描述 第1步:用两个很大的互异的质数p和q(p和q必须保密),计算它们的乘积n=pq:n是模数. 第2步:选择一个比n小的数e,它与(p-1)(q-1)互为质数,即除了1以外,e ...

  5. 5.7 维吉尼亚密码(已更新)

    任务描述 本关任务:编写程序,通过维吉尼亚密码将密文解密成文本. 相关知识 维吉尼亚密码--解密 凯撒密码的加密强度是很低的,只需简单地统计字频就可以破译.人们在单一凯撒密码的基础上扩展出多表密码,称 ...

  6. 5.7 维吉尼亚密码(project)

    第1关:维吉尼亚密码--解密 任务描述 本关任务:编写程序,通过维吉尼亚密码将密文解密成文本. 相关知识 维吉尼亚密码--解密 凯撒密码的加密强度是很低的,只需简单地统计字频就可以破译.人们在单一凯撒 ...

  7. 信息安全——维吉尼亚密码算法(C++实现)

    信息安全导论课程学习的实验一,维吉尼亚密码算法C++的实现. 维吉尼亚密码算法是一种代换密码算法,直观上来说,密钥一般短于明文长度,因此加密时需要将明文根据密钥长度进行分组,每一组明文根据密钥对应(0 ...

  8. 维吉尼亚密码破解过程

    维吉尼亚密码破解过程 问题分析 利用重合指数攻击破解密钥长度 维吉尼亚密码加解密算法的python3实现 给定明文,进行维吉尼亚加密,将密文传给破解密钥的程序 破解维吉尼亚密码密钥长度的python3 ...

  9. 维吉尼亚密码 (原理+代码)

    目录 1.原理 2.流程图 3.编程实现 4.总结 1.原理         维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 1508年时, ...

最新文章

  1. 让数据库变快的10个建议
  2. 浅析企业网站排名低可能是哪些原因导致的呢?
  3. 前微博副总私房干货:微博平台与架构从零到IPO的打磨经验
  4. 附件下载,中文文件名乱码如何解决???
  5. 通过windows客户端访问
  6. 作者:程学旗,男,中国科学院计算技术研究所研究员、博士生导师,中国科学院“网络数据科学与技术”重点实验室主任。...
  7. numpy求逆矩阵_线性代数精华2——逆矩阵的推导过程
  8. 选择合适的方法调试程序
  9. 日常总结——域环境管理
  10. 最后一战 源代码_我们的故事 | 一枚“铁渣”的一战成名
  11. dva.js 知识导图
  12. 帆软FineMobile 自适应
  13. 复制百度文库及其他收费文档的方法
  14. stm32f030 硬件I2C配置
  15. 个人所得税分几个等级
  16. 光驱放入空盘,出现无法访问函数不正确(收藏)
  17. 自然语言(NLP)处理流程—IF-IDF统计—jieba分词—Word2Vec模型训练使用
  18. Millet谷仓:区块链重构电商
  19. 三星矫情,重温Galaxy S5发布会收买人心
  20. python 环境配置

热门文章

  1. URLDecoder.decode与URLEncoder.encode
  2. matlab指令subplot,matlab指令subplot
  3. (三)兴趣对于工作的重要性
  4. 机器学习服务助应用内文本语种在线和离线检测
  5. 关于项目 no jacob-1.18-x64 in java.library.path问题解决方案
  6. C语言实现简单小游戏---扫雷
  7. Base16和Base64不同的用途
  8. 南京邮电大学操作系统实验五:Windows平台多进程共享内存通信
  9. SIMXXX 在高德地图定位到我的位置
  10. Eclipse插件安装最简单方式--以Eclipse中文语言包汉化为例(附汉化包)