攻防世界-Decrypt-the-Message

news/2024/12/1 23:30:31/文章来源:https://www.cnblogs.com/wyuu101/p/18580622

一、题目

收到一首英文诗歌和一段密文,要求很简单,就是解密这个密文

二、解题

1、背景知识PoemCode

参考文章:https://blog.csdn.net/xiao__1bai/article/details/120250452

2、解密

了解加密原理即可,解密过程很复杂,可以直接用现成的脚本

  • 脚本地址:https://github.com/abpolym/crypto-tools/tree/master/poemcode
  • 脚本用法:`python poemcode.py poem.txt msg.txt
  • 脚本用法参考:https://www.cnblogs.com/zhengna/p/14763913.html

3、答案

从输出中找到有实际意义的语段,即为明文

flag:ifyouthinkcryptographyistheanswertoyourproblemthenyoudonotknowwhatyourproblemisabcdefghijklmnopqrstu

3、脚本代码

import sys
import itertools
from os import listdir
from os.path import isfile, joinabc = 'abcdefghijklmnopqrstuvwxyz'def loadlist(infile):tlist = []for line in open(infile, 'r'):for w in line.split(): tlist.append(w.lower())return tlistdef encrypt(code, poem, msg):# Load all words of the poem into a temporary listtwords = loadlist(poem)# Select only those words specified in the code in a new listpwords = ''for c in code: pwords += twords[c].lower()plen = len(pwords)# We can only support encoding all alphabetical letters, a key length greater len(abc) is not reasonable hereif plen > len(abc): sys.exit(3)# Assign an index for each letter in the key based on the alphabetpcode = [None] * plencount = 0while (count < plen):for al in abc:for pc, pl in enumerate(pwords):if al != pl: continuepcode[pc] = countcount += 1# Load all words of the message into a stringmwords = ''for line in open(msg, 'r'):for w in line.split(): mwords += w.lower()mlen = len(mwords)# Split message into chunks of size plen, append random (here alphabet) characters to fill the last chunk, if necessarycpairs = []curlen = plenwhile (curlen < mlen):cpairs.append(mwords[curlen - plen:curlen])curlen += plenrword = mwords[curlen - plen:curlen]rlen = len(rword)if rlen < plen: rword += abc[:plen - rlen]cpairs.append(rword)# Encrypt the message according to the keycip = ''for i in code: cip += abc[i]cip += ' 'for i in pcode:for pair in cpairs:cip += pair[i]cip += ' 'return cipdef decrypt(poem, cip):# Load all words of the poem into a temporary listtwords = loadlist(poem)# Load all cipher chunks of the ciphertext into a listcwords = loadlist(cip)# Get the code rom the first chunk and remove it from the ciphertext listcode = []for i in cwords.pop(0):code.append(abc.index(i))# Select only those words specified in the code in a new multi-arrayed listxwords = [[] for x in range(len(code))]for xcount, c in enumerate(code):tlen = cwhile (c < len(twords)):xwords[xcount].append(twords[c].lower())c += 26# Get all possible combinationsfor comb in itertools.product(*xwords):pwords = ''for c in comb: pwords += cplen = len(pwords)# Rearrange the chunks according to the keypcode = [None] * plencount = 0while (count < plen):for al in abc:for pc, pl in enumerate(pwords):if al != pl: continuepcode[count] = cwords[pc]count += 1# Decrypt the ciphertextmsg = ''wlen = len(pcode[0])for c in range(0, wlen):for word in pcode:msg += word[c]print(msg)# first argument = poem
# second argument = ciphertxt or msg
if len(sys.argv) != 3:sys.exit(2)# print encrypt([0, 5, 13, 16, 19], sys.argv[1], sys.argv[2])
decrypt(sys.argv[1], sys.argv[2])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/844811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请问PbootCMS 登录失败及表单提交校验失败的解决方案

在使用 PbootCMS 时,可能会遇到登录失败、表单提交校验失败等问题。以下是针对这些常见问题的详细解决方案。 一、登录失败或表单提交校验失败 描述:用户尝试登录时失败。 表单提交时校验失败。解决方案:检查服务器环境:确保服务器环境满足 PbootCMS 的最低要求。 检查 PHP 版…

# 学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第10周学习总结

学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第10周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目…

关于用户反馈到产品需求的思考

1 前言 在数字产品的世界中,用户反馈不仅是检验产品成功与否的试金石,更是推动产品迭代与创新的关键驱动力。作为项目负责人,我们深知每一个反馈背后蕴含的用户需求与期望。最近刚好看到了@玉伯大佬写的文章从用户反馈到产品需求的思考,深受启发,结合这一年半的工作经验,…

2024年11月文章一览

2024年11月编程人总共更新了21篇文章: 1.2024年10月文章一览 2.《使用Gin框架构建分布式应用》阅读笔记:p307-p392 3.《使用Gin框架构建分布式应用》阅读笔记:p393-p437 4.《使用Gin框架构建分布式应用》读后感 5.《Django 5 By Example》阅读笔记:p1-p16 6.《Django 5 By …

请问帝国CMS动态页面生成静态页面失败怎么办

检查生成设置:进入后台的“系统设置” -> “生成设置”,检查静态页面生成设置是否正确。 确保生成模式选择正确,例如“只生成首页”、“生成所有页面”等。检查模板文件:确保模板文件中没有语法错误,特别是PHP代码部分。 检查模板文件路径是否正确。检查文件权限:确保…

请问宝塔安装好后网址打不开的可能原因及解决方法

检查域名解析确认域名是否正确解析到服务器的IP地址。 使用 ping 命令测试域名解析是否正确,例如:ping yourdomain.com。检查服务器网络确认服务器的网络连接是否正常。 尝试从服务器内部访问外部网站,确保网络畅通。检查防火墙设置确认服务器的防火墙设置是否允许HTTP/HTTP…

宝塔系统安装网站后打不开的解决方法及排查步骤

1. 检查网络连接确认服务器网络是否正常:从服务器上尝试 ping 外部网站,确保网络畅通。 例如:ping 域名 或 ping 你的网址2. 检查宝塔面板状态登录服务器,检查面板是否正常运行:使用命令 bt 进入宝塔面板管理界面。 如果面板未运行,尝试启动面板:bt start3. 检查网站配置…

2.C基础

1.注释单行注释 // 多行注释 /* */ 程序运行后生成的 .obj文件里不带注释的内容/*include 表示包含 std :标准的 i: 输入Input o:输出Output */ #include <stdio.h> //预处理//int 表示程序运行的结果是整数 与return 0相呼应 //main() 函数是程序的主入口 固定指定为…

昆工25届817信号与系统模拟考试

--吴大正信号与线性系统分析昆工昆明理工大学通信工程817信号与系统考研信号与信息处理通信与信息系统通信工程F002通信核心课程综合通信工程(含宽带网络、移动通信等)

Android 简单控件

创建一个新模块 chapter03:创建成功:在模块 chapter03 中创建一个布局:

基于Bootstrap的Material Design风格表单插件

Jquery Material Form Plugin是一款基于Bootstrap的Material Design风格的JQUERY表单插件。该表单通过自定义样式和jQuery来将Bootstrap的表单修改为扁平风格的表单,并带有浮动标签特效。在线演示 下载使用方法 使用该Material Design风格表单需要在页面中引入jquery,boots…

HCIP-12 路由策略与路由控制

控制路由的发布、接收时需要先将相应的路由使用匹配器进行抓取,最常见的匹配器有ACL、 IP-Prefix List 。 Filter-Policy、Route-Policy都可用来在发布、接收路由时进行过滤,但需要注意在链路状态路由协议中使用Filter-Policy并不能正常的过滤链路状态信息,只是影响了本地的…