首页 > 其他分享 >攻防世界-Decrypt-the-Message

攻防世界-Decrypt-the-Message

时间:2024-12-01 23:33:02浏览次数:7  
标签:count 攻防 code pwords Decrypt len abc plen Message

一、题目

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

二、解题

1、背景知识PoemCode

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

2、解密

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

3、答案

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

flag:ifyouthinkcryptographyistheanswertoyourproblemthenyoudonotknowwhatyourproblemisabcdefghijklmnopqrstu

3、脚本代码

import sys
import itertools
from os import listdir
from os.path import isfile, join

abc = 'abcdefghijklmnopqrstuvwxyz'


def loadlist(infile):
    tlist = []
    for line in open(infile, 'r'):
        for w in line.split(): tlist.append(w.lower())
    return tlist


def encrypt(code, poem, msg):
    # Load all words of the poem into a temporary list
    twords = loadlist(poem)

    # Select only those words specified in the code in a new list
    pwords = ''
    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 here
    if plen > len(abc): sys.exit(3)

    # Assign an index for each letter in the key based on the alphabet
    pcode = [None] * plen
    count = 0
    while (count < plen):
        for al in abc:
            for pc, pl in enumerate(pwords):
                if al != pl: continue
                pcode[pc] = count
                count += 1

    # Load all words of the message into a string
    mwords = ''
    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 necessary
    cpairs = []
    curlen = plen
    while (curlen < mlen):
        cpairs.append(mwords[curlen - plen:curlen])
        curlen += plen
    rword = mwords[curlen - plen:curlen]
    rlen = len(rword)
    if rlen < plen: rword += abc[:plen - rlen]
    cpairs.append(rword)

    # Encrypt the message according to the key
    cip = ''
    for i in code: cip += abc[i]
    cip += ' '
    for i in pcode:
        for pair in cpairs:
            cip += pair[i]
        cip += ' '
    return cip


def decrypt(poem, cip):
    # Load all words of the poem into a temporary list
    twords = loadlist(poem)

    # Load all cipher chunks of the ciphertext into a list
    cwords = loadlist(cip)

    # Get the code rom the first chunk and remove it from the ciphertext list
    code = []
    for i in cwords.pop(0):
        code.append(abc.index(i))

    # Select only those words specified in the code in a new multi-arrayed list
    xwords = [[] for x in range(len(code))]
    for xcount, c in enumerate(code):
        tlen = c
        while (c < len(twords)):
            xwords[xcount].append(twords[c].lower())
            c += 26

    # Get all possible combinations
    for comb in itertools.product(*xwords):
        pwords = ''
        for c in comb: pwords += c
        plen = len(pwords)

        # Rearrange the chunks according to the key
        pcode = [None] * plen
        count = 0
        while (count < plen):
            for al in abc:
                for pc, pl in enumerate(pwords):
                    if al != pl: continue
                    pcode[count] = cwords[pc]
                    count += 1

        # Decrypt the ciphertext
        msg = ''
        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])

标签:count,攻防,code,pwords,Decrypt,len,abc,plen,Message
From: https://www.cnblogs.com/wyuu101/p/18580622

相关文章

  • 20222303 2024-2025-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容应用SET工具,通过多步操作建立冒名网站,获取登录信息。利用ettercap实施DNSspoof攻击,篡改特定网站IP。结合两种技术,用DNSspoof引导访问至冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站输入命令sudovi/etc/apache2/ports.conf查看本机apache......
  • 攻防世界-best_rsa
    一、题目给出两个公钥和两个密文二、解题1、两个公钥,用Crypto库可以直接获取到n1,n2,e1,e22、但是仅有n和e和c无法解出明文,还需要有d,但是算d需要有p和q,打印n发现是个上百位的模数,通过暴力算法显然不当,因此弃用yafu。再到http://www.factordb.com/尝试分解,也没有结果3......
  • 攻防世界-baigeiRSA
    一、题目给了如下两个文件二、解题1、查看代码发现就是简单的RSA加密算法,仔细分析一下发现flag就是明文,而要获得flag就要解密密文,但是代码中只提供了e。于是又去out文件翻了一下,常使用记事本打开,发现n和c已经给出,由于n的位数只有78个字符,可以尝试暴力分解因数2、分解因数(......
  • 20222317 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站2.1.1开启并配置Apac......
  • 20222323 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程(1)简单应用SET工具建立冒名网站使用set工具setoolkit克......
  • 20222412 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    202224122021-2022-2《网络与系统攻防技术》实验七实验报告1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站SET工具是一款开源的社会工程学渗透测试工具,专门用于模拟各种社会工程学攻击场景。......
  • 20222310 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    一、实验内容1.本周学习内容(1)一些web安全的知识,复习了相关web的基础知识,比如:前、后端的区别,前后端的语言如HTML,CSS,JS,GO等(2)一些数据库攻击的知识,如SQL注入2.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建......
  • 《网络与系统攻防技术》实验八实验报告
    1.实验内容及要求(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。(2)Web前端javascipt理解JavaScript的基本功能,理解DOM。在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户......
  • 【攻防世界】WEB-inget
    首先找到该关卡启动靶场环境访问靶场构造一个id参数,尝试访问,无内容回显使用sqlmap工具,先获取数据库,输入命令sqlmap-uhttp://61.147.171.105:58893/?id=1--dbs发现第一个即为所需数据库,接下来进行获取字段,输入命令sqlmap-uhttp://61.147.171.105:58893/?id=1......
  • #渗透测试#SRC漏洞挖掘#红蓝攻防#黑客工具之Burp Suite介绍02-如何破解(中英对比)
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。                             ......