任务描述

本关任务:编写程序,通过维吉尼亚密码将密文解密成文本。

相关知识

维吉尼亚密码——解密

凯撒密码的加密强度是很低的,只需简单地统计字频就可以破译。人们在单一凯撒密码的基础上扩展出多表密码,称为维吉尼亚密码。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

维吉尼亚密码引入了密钥的概念,即根据密钥来决定用哪一行的密码表来进行替换,以此来对抗字频统计。

假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

TO BE OR NOT TO BE THAT IS THE QUESTION‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

当选定RELATIONS作为密钥时,加密过程是:明文一个字母为 T ,第一个密钥字母为 R ,因此可以找到在 R 行中代替 T 的为 K ,依此类推,得出对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

密钥: RE LA TI ONS RE LA TION SR ELA TIONSREL‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

明文: TO BE OR NOT TO BE THAT IS THE QUESTION‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

密文: KS ME HZ BBL KS ME MPOG AJ XSE JCSFLZSY‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

小写字母采用相同的加密表格和加密方法(将上述方法里的大写字母换为小写字母即可)。

遇到数字时,可将其密钥字母在密码表中的偏移量对10取模的结果作为在数字表格中的偏移量,例如:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1的密钥 R 在表格中的偏移量为 17A 在字母表里的偏移量为 0),偏移量对 10 取模结果为 7 ,加密时,查表格中 1 对应的列 1 2 3 4 5 6 7 8 9 0 中序号为 7 的数字,得到加密结果应为 89 的密钥“E”的偏移量是 4 ,在 9 对应的行中序号为 4 的数字是 3 。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第1关:维吉尼亚密码——解密

import stringdef vigenere_decrypt(text, key):"""接收密文字符串和密钥字符串为参数,返回解密后的字符串.解密时字母和数字以外的其他字符原样输出。"""lower_tab = string.ascii_lowercase    # 小写字母upper_tab = string.ascii_uppercase    # 大写字母digit_tab = string.digits#####################Begin###################################### 此处去掉注释符号“#”并补充你的代码times = 0plaintext = ''for letter in text:index = times % len(key)offset = upper_tab.find(key[index])if letter in upper_tab:upper_offset = upper_tab[offset:] + upper_tab[:offset]plaintext = plaintext + upper_tab[upper_offset.find(letter)]times = times + 1elif letter in lower_tab:lower_offset = lower_tab[offset:] + lower_tab[:offset]plaintext = plaintext + lower_tab[lower_offset.find(letter)]times = times + 1elif letter in digit_tab:offset = offset % 10digit_offset =digit_tab[offset:] + digit_tab[:offset]plaintext = plaintext + digit_tab[digit_offset.find(letter)]times = times + 1else:plaintext = plaintext + letterreturn plaintext#####################End#####################################if __name__ == '__main__':secret_key = input()cipher_text = input()plain_text = vigenere_decrypt(cipher_text, secret_key)print(f'解密后得到的明文是{plain_text}')

第2关:维吉尼亚密码——加密

import stringdef vigenere_encryption(text, key):"""接收明文字符串和密钥字符串为参数,返回加密后的字符串.加密时字母和数字以外的其他字符原样输出。数字加密时,根据对应的密钥字符在字母表中的偏移量对10取模得到数字的偏移量。例如当前数字为1,对应的密钥字母是R,R的偏移量是17,对10取模为7,1 2 3 4 5 6 7 8 9 0 中序号为7的数字是8,加密结果即为8"""lower_tab = string.ascii_lowercase  # 小写字母upper_tab = string.ascii_uppercase  # 大写字母digit_tab = string.digits# 补充你的代码times = 0cipher_text = ''key = key.upper()for letter in text:index = times % len(key)offset = upper_tab.find(key[index])if letter in upper_tab:upper_offset = upper_tab[offset:] + upper_tab[:offset]cipher_text = cipher_text + upper_offset[upper_tab.find(letter)]times = times + 1elif letter in lower_tab:lower_offset = lower_tab[offset:] + lower_tab[:offset]cipher_text = cipher_text + lower_offset[upper_tab.find(letter.upper())]times = times + 1elif letter in digit_tab:offset = upper_tab.find(key[index])offset = offset % 10digit_offset = digit_tab[offset:] + digit_tab[:offset]cipher_text = cipher_text + digit_offset[digit_tab.find(letter)]times = times + 1else:cipher_text = cipher_text + letterreturn cipher_text  if __name__ == '__main__':secret_key = input()plain_text = input()plain_to_cipher_text = vigenere_encryption(plain_text, secret_key)print(f'加密后得到的密文是{plain_to_cipher_text}')

不负青春,不留遗憾,愿所有的磨练,都能让我们有所收获,有所成长!✌️

5.7 维吉尼亚密码(已更新)相关推荐

  1. 实验吧-密码学-杯酒人生(特殊凯撒--维吉尼亚密码)(凯撒加解密脚本、维吉尼亚密码加解密脚本)...

    题目: 使用古典密码 一喵星人要想喵星发送一段不知道干什么用的密码"BLOCKCIPHERDESIGNPRINCIPLE", 但是它忘记了密钥是什么, 手头(爪头)只有它自己加密过 ...

  2. 维吉尼亚密码破解(Python完整详细源码)

    维吉尼亚密码破解(Python完整详细源码) 欢迎大家访问我的GitHub博客 https://lunan0320.github.io/ 文章目录 维吉尼亚密码破解(Python完整详细源码) 1.写 ...

  3. python 维吉尼亚密码加密和解密

    最近在学密码学,作业里面的加密解密看得脑壳疼,刚好寒假自学了一些python,第一反应就是用python帮我加解密. 菜菜的我写了好久,刚写完,然后同学告诉我维吉尼亚密码有专门的加密解密的库,我一下就 ...

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

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

  5. 维吉尼亚密码-攻防世界(shanghai)

    ⭐维吉尼亚密码 维吉尼亚密码 是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中 ...

  6. Android实现信息安全中维吉尼亚密码技术

    人们在单一恺撒密码的基础上扩展出多表密码,称为"维吉尼亚"密码.是法国密码学家维吉尼亚在1586年提出的一种多表替代密码,维吉尼亚密码引入了"密钥"的概念,即根 ...

  7. 维吉尼亚密码(Vigenère Cipher)

    由于频率分析法可以有效的破解单表替换密码,法国密码学家维吉尼亚于1586年提出一种多表替换密码,即维吉尼亚密码,也称维热纳尔密码.维吉尼亚密码引入了"密钥"的概念,即根据密钥来决定 ...

  8. CTF杂项之“维吉尼亚密码”

    Didi 在这次省赛上做到了一到维吉尼亚密码的题,以前没做过很懵,问了同学才知道 先上图: baby 是秘钥 glbe{pnf_njedc_js_ufjs_kmvrocz!} 是密文 在线解密 htt ...

  9. C++vigenere cipher维吉尼亚密码算法(附完整源码)

    vigenere cipher维吉尼亚密码的算法 vigenere cipher维吉尼亚密码的完整源码(定义,实现,main函数测试) vigenere cipher维吉尼亚密码的完整源码(定义,实现 ...

最新文章

  1. android升级gradle到3.4.1
  2. $this-load-view()
  3. NETINT刘迅思:底层软件开发向上层应用靠拢
  4. 利用matlab绘制图形
  5. 【学术新闻】强强联合!Papers with Code携手arXiv,上传论文、提交代码一步到位...
  6. FBI也没辙?超强加密软件TrueCrypt全教程
  7. Activiti学习记录 Activiti初始化数据库、Activiti6增加表注释字段注释
  8. Linux 定时器 基本使用
  9. 马氏距离 java实现_Python怎么实现马氏距离
  10. 电子计算机 隐形眼镜,戴隐形眼镜看电脑要注意什么
  11. Chrome断点JS寻找淘宝签名sign
  12. centos7 yum 配置阿里云镜像
  13. Python网络爬虫实例(爬一些小网站的图片)
  14. 导数求函数的单调性与极值习题
  15. 6-18位包含数字字母,大小写,特殊字符,正则表达式
  16. C# 打印调试信息到DebugView
  17. MVC3.0 中Razor 学习 cshtml文件
  18. Leetcode-1002:查找常用字符(简单解法)
  19. EMC电磁兼容3:仪器受电磁辐射干扰怎么办?
  20. c4droid用c语言画爱心,【图片】[自学C语言第五天]发一个作品【c4droid吧】_百度贴吧...

热门文章

  1. 酒业迷茫期,江小白凭什么获十亿融资?
  2. SIM应用那些事儿,你做对了吗?
  3. CVPR2022新作:P图不会,深度学习来帮忙:基于GAN逆映射的图像编辑(上)
  4. VS2019怎么没有C++的窗体应用模板_衡州销售支架z型钢价格-怎么样_浙江铭凯
  5. 在Oracle中,如何定时删除归档日志文件?
  6. 时间管理(Time Management)
  7. Git代码版本管理命令和团队协作规范---实践版
  8. 以root身份登录ylmf4.0
  9. B2B电子商务策略[在2022年发展您的业务]
  10. 【MATLAB】matlab的简单认识