当前位置: 首页 > news >正文

Baconian (Stegano, Encoding, C..的解法

题目

In this training challenge you have to reveal a hidden message inside another message.
It is known that the message is hidden via Bacon cipher.

Again the solution changes for every session and consists of 12 random characters.

Enjoy!

BaCoN's cIphEr or THE bacOnIAN CiPHer iS a meThOD oF sTEGaNOGrapHY (a METhoD Of HidIng A sECRet MeSsaGe as OpPOsEd TO a TRUe CiPHeR) dEVIseD BY francis bAcoN. a MessAge Is coNCeALED in THe pRESenTatIoN OF TexT, ratHer thaN iTs coNteNt. tO enCODe A MEsSaGe, eaCh lETter Of THe pLAInText Is rePLAcED By A groUp oF fIvE OF the LeTterS 'a' OR 'B'. thiS REpLACEmenT Is donE accORding To The alpHAbeT OF tHe BACOnIAN cIpHeR, sHoWn bElOw. NoTe: A SeCoNd vErSiOn oF BaCoN'S CiPhEr uSeS A UnIqUe cOdE FoR EaCh lEtTeR. iN OtHeR WoRdS, i aNd j eAcH HaS ItS OwN PaTtErN. tHe wRiTeR MuSt mAkE UsE Of tWo dIfFeReNt tYpEfAcEs fOr tHiS CiPhEr. AfTeR PrEpArInG A FaLsE MeSsAgE WiTh tHe sAmE NuMbEr oF LeTtErS As aLl oF ThE As aNd bS In tHe rEaL, sEcReT MeSsAgE, tWo tYpEfAcEs aRe cHoSeN, oNe tO RePrEsEnT As aNd tHe oThEr bS. tHeN EaCh lEtTeR Of tHe fAlSe mEsSaGe mUsT Be pReSeNtEd iN ThE ApPrOpRiAtE TyPeFaCe, AcCoRdInG To wHeThEr iT StAnDs fOr aN A Or a b. To dEcOdE ThE MeSsAgE, tHe rEvErSe mEtHoD Is aPpLiEd. EaCh 'TyPeFaCe 1' LeTtEr iN ThE FaLsE MeSsAgE Is rEpLaCeD WiTh aN A AnD EaCh 'TyPeFaCe 2' LeTtEr iS RePlAcEd wItH A B. tHe bAcOnIaN AlPhAbEt iS ThEn uSeD To rEcOvEr tHe oRiGiNaL MeSsAgE. aNy mEtHoD Of wRiTiNg tHe mEsSaGe tHaT AlLoWs tWo dIsTiNcT RePrEsEnTaTiOnS FoR EaCh cHaRaCtEr cAn bE UsEd fOr tHe bAcOn cIpHeR. bAcOn hImSeLf pRePaReD A BiLiTeRaL AlPhAbEt[2] FoR HaNdWrItTeN CaPiTaL AnD SmAlL LeTtErS WiTh eAcH HaViNg tWo aLtErNaTiVe fOrMs, OnE To bE UsEd aS A AnD ThE OtHeR As b. ThIs wAs pUbLiShEd aS An iLlUsTrAtEd pLaTe iN HiS De aUgMeNtIs sCiEnTiArUm (ThE AdVaNcEmEnT Of lEaRnInG). BeCaUsE AnY MeSsAgE Of tHe rIgHt lEnGtH CaN Be uSeD To cArRy tHe eNcOdInG, tHe sEcReT MeSsAgE Is eFfEcTiVeLy hIdDeN In pLaIn sIgHt. ThE FaLsE MeSsAgE CaN Be oN AnY ToPiC AnD ThUs cAn dIsTrAcT A PeRsOn sEeKiNg tO FiNd tHe rEaL MeSsAgE.

分析

这题是解密培根密码,培根密码有两种密码表,并使用’A’、’B’代替0,1进行编码。
第一种密码表:

Baconian (Stegano, Encoding, C..的解法

第二种密码表:

Baconian (Stegano, Encoding, C..的解法

假如我要加密‘hello’,按照第一种方法加密的结果为:aabbb,aabaa,ababa,ababa,abbab;第二种为:aabbb,aabaa,ababb,ababb,abbba。

假如要解密‘WOrld…’,把整个字符串的大小写代表着‘A’、‘B’编码,所以这里有两个编码可能性,一是大写代表‘A’,小写代表‘B’,第二种相反。同时这里又有两种密码表,所以这里一共有2*2=4种可能性。

大写代表‘A’,小写代表‘B’,用第一种密码表可得:‘h’,第二种为:‘h’,这里刚好一样。
大写代表‘B’,小写代表‘A’,用第一种密码表没有结果,第二种为:‘y’。

解决

方法一

首先将密文转换为A,B的集合,然后利用在线工具进行解密

利用以下Python代码转换密文:

ciper = "BaCoN's cIphEr or THE bacOnIAN CiPHer iS a meThOD oF sTEGaNOGrapHY (a METhoD Of HidIng A sECRet MeSsaGe as OpPOsEd TO a TRUe CiPHeR) dEVIseD BY francis bAcoN. a MessAge Is coNCeALED in THe pRESenTatIoN OF TexT, ratHer thaN iTs coNteNt. tO enCODe A MEsSaGe, eaCh lETter Of THe pLAInText Is rePLAcED By A groUp oF fIvE OF the LeTterS 'a' OR 'B'. thiS REpLACEmenT Is donE accORding To The alpHAbeT OF tHe BACOnIAN cIpHeR, sHoWn bElOw. NoTe: A SeCoNd vErSiOn oF BaCoN'S CiPhEr uSeS A UnIqUe cOdE FoR EaCh lEtTeR. iN OtHeR WoRdS, i aNd j eAcH HaS ItS OwN PaTtErN. tHe wRiTeR MuSt mAkE UsE Of tWo dIfFeReNt tYpEfAcEs fOr tHiS CiPhEr. AfTeR PrEpArInG A FaLsE MeSsAgE WiTh tHe sAmE NuMbEr oF LeTtErS As aLl oF ThE As aNd bS In tHe rEaL, sEcReT MeSsAgE, tWo tYpEfAcEs aRe cHoSeN, oNe tO RePrEsEnT As aNd tHe oThEr bS. tHeN EaCh lEtTeR Of tHe fAlSe mEsSaGe mUsT Be pReSeNtEd iN ThE ApPrOpRiAtE TyPeFaCe, AcCoRdInG To wHeThEr iT StAnDs fOr aN A Or a b. To dEcOdE ThE MeSsAgE, tHe rEvErSe mEtHoD Is aPpLiEd. EaCh 'TyPeFaCe 1' LeTtEr iN ThE FaLsE MeSsAgE Is rEpLaCeD WiTh aN A AnD EaCh 'TyPeFaCe 2' LeTtEr iS RePlAcEd wItH A B. tHe bAcOnIaN AlPhAbEt iS ThEn uSeD To rEcOvEr tHe oRiGiNaL MeSsAgE. aNy mEtHoD Of wRiTiNg tHe mEsSaGe tHaT AlLoWs tWo dIsTiNcT RePrEsEnTaTiOnS FoR EaCh cHaRaCtEr cAn bE UsEd fOr tHe bAcOn cIpHeR. bAcOn hImSeLf pRePaReD A BiLiTeRaL AlPhAbEt[2] FoR HaNdWrItTeN CaPiTaL AnD SmAlL LeTtErS WiTh eAcH HaViNg tWo aLtErNaTiVe fOrMs, OnE To bE UsEd aS A AnD ThE OtHeR As b. ThIs wAs pUbLiShEd aS An iLlUsTrAtEd pLaTe iN HiS De aUgMeNtIs sCiEnTiArUm (ThE AdVaNcEmEnT Of lEaRnInG). BeCaUsE AnY MeSsAgE Of tHe rIgHt lEnGtH CaN Be uSeD To cArRy tHe eNcOdInG, tHe sEcReT MeSsAgE Is eFfEcTiVeLy hIdDeN In pLaIn sIgHt. ThE FaLsE MeSsAgE CaN Be oN AnY ToPiC AnD ThUs cAn dIsTrAcT A PeRsOn sEeKiNg tO FiNd tHe rEaL MeSsAgE."
result = ""
for i in ciper:
    if i.islower():
        result += 'A'
    elif i.isupper():
        result+='B'

print(result)

将打印输出的结果粘贴到在线工具中:

Baconian (Stegano, Encoding, C..的解法

结果如下:

VERYXWELLXDONEXFELLOWXHACKERXTHEXSECRETXKEYWORDXISXCROHPDBDBIGOXXKVFKSUJOUWKWWURNWVFNFWJKSVEWVLKXLKJNJVMTMTEVLKUVJFKNKZEUVUVSKKSZKTNKWVKVSUSOEVWVJKKZKVKVJWWVSVUVKVJVJOSVVJUWKSKWVJLFJFJNJFLKVLNFKJUSKKVFJKKVNKWVWWVUWUSVJKZUWWKJKTFKSTMVJKVNKWKWVWVSKKFSSKVFNLFKSWKKWWVWNVWSKXKKTJFV

可以看到将X换成空格,即可得到有意义的英文句子。

用python替换下:

plain = "VERYXWELLXDONEXFELLOWXHACKERXTHEXSECRETXKEYWORDXISXCROHPDBDBIGOXXKVFKSUJOUWKWWURNWVFNFWJKSVEWVLKXLKJNJVMTMTEVLKUVJFKNKZEUVUVSKKSZKTNKWVKVSUSOEVWVJKKZKVKVJWWVSVUVKVJVJOSVVJUWKSKWVJLFJFJNJFLKVLNFKJUSKKVFJKKVNKWVWWVUWUSVJKZUWWKJKTFKSTMVJKVNKWKWVWVSKKFSSKVFNLFKSWKKWWVWNVWSKXKKTJFV"
print(plain.replace('X',' '))

结果:

VERY WELL DONE FELLOW HACKER THE SECRET KEYWORD IS CROHPDBDBIGO  KVFKSUJOUWKWWURNWVFNFWJKSVEWVLK LKJNJVMTMTEVLKUVJFKNKZEUVUVSKKSZKTNKWVKVSUSOEVWVJKKZKVKVJWWVSVUVKVJVJOSVVJUWKSKWVJLFJFJNJFLKVLNFKJUSKKVFJKKVNKWVWWVUWUSVJKZUWWKJKTFKSTMVJKVNKWKWVWVSKKFSSKVFNLFKSWKKWWVWNVWSK KKTJFV

flag已经得到,是CROHPDBDBIGO ,提示:每次刷新flag都会变。所以我们的不一样。

方法二

这种方法不用工具,直接用python来做。

代码来自:ctf-wechall-Crypto - zhang14916的博客 - CSDN博客

s="BaCoN's cIphEr or THE bacOnIAN CiPHer iS a meThOD oF sTEGaNOGrapHY (a METhoD Of HidIng A sECRet MeSsaGe as OpPOsEd TO a TRUe CiPHeR) dEVIseD BY francis bAcoN. a MessAge Is coNCeALED in THe pRESenTatIoN OF TexT, ratHer thaN iTs coNteNt. tO enCODe A MEsSaGe, eaCh lETter Of THe pLAInText Is rePLAcED By A groUp oF fIvE OF thE LettERS 'a' Or 'b'. thIS REPlacEMenT is dOnE aCcORdiNG To The alPhABet oF THe BACOnIAN cIpHeR, sHoWn bElOw. NoTe: A SeCoNd vErSiOn oF BaCoN'S CiPhEr uSeS A UnIqUe cOdE FoR EaCh lEtTeR. iN OtHeR WoRdS, i aNd j eAcH HaS ItS OwN PaTtErN. tHe wRiTeR MuSt mAkE UsE Of tWo dIfFeReNt tYpEfAcEs fOr tHiS CiPhEr. AfTeR PrEpArInG A FaLsE MeSsAgE WiTh tHe sAmE NuMbEr oF LeTtErS As aLl oF ThE As aNd bS In tHe rEaL, sEcReT MeSsAgE, tWo tYpEfAcEs aRe cHoSeN, oNe tO RePrEsEnT As aNd tHe oThEr bS. tHeN EaCh lEtTeR Of tHe fAlSe mEsSaGe mUsT Be pReSeNtEd iN ThE ApPrOpRiAtE TyPeFaCe, AcCoRdInG To wHeThEr iT StAnDs fOr aN A Or a b. To dEcOdE ThE MeSsAgE, tHe rEvErSe mEtHoD Is aPpLiEd. EaCh 'TyPeFaCe 1' LeTtEr iN ThE FaLsE MeSsAgE Is rEpLaCeD WiTh aN A AnD EaCh 'TyPeFaCe 2' LeTtEr iS RePlAcEd wItH A B. tHe bAcOnIaN AlPhAbEt iS ThEn uSeD To rEcOvEr tHe oRiGiNaL MeSsAgE. aNy mEtHoD Of wRiTiNg tHe mEsSaGe tHaT AlLoWs tWo dIsTiNcT RePrEsEnTaTiOnS FoR EaCh cHaRaCtEr cAn bE UsEd fOr tHe bAcOn cIpHeR. bAcOn hImSeLf pRePaReD A BiLiTeRaL AlPhAbEt[2] FoR HaNdWrItTeN CaPiTaL AnD SmAlL LeTtErS WiTh eAcH HaViNg tWo aLtErNaTiVe fOrMs, OnE To bE UsEd aS A AnD ThE OtHeR As b. ThIs wAs pUbLiShEd aS An iLlUsTrAtEd pLaTe iN HiS De aUgMeNtIs sCiEnTiArUm (ThE AdVaNcEmEnT Of lEaRnInG). BeCaUsE AnY MeSsAgE Of tHe rIgHt lEnGtH CaN Be uSeD To cArRy tHe eNcOdInG, tHe sEcReT MeSsAgE Is eFfEcTiVeLy hIdDeN In pLaIn sIgHt. ThE FaLsE MeSsAgE CaN Be oN AnY ToPiC AnD ThUs cAn dIsTrAcT A PeRsOn sEeKiNg tO FiNd tHe rEaL MeSsAgE."
codebook1 = {
    'A':"aaaaa",
    'B':"aaaab",
    'C':"aaaba",
    'D':"aaabb",
    'E':"aabaa",
    'F':"aabab",
    'G':"aabba",
    'H':"aabbb",
    'I':"abaaa",
    'J':"abaab",
    'K':"ababa",
    'L':"ababb",
    'M':"abbaa",
    'N':"abbab",
    'O':"abbba",
    'P':"abbbb",
    'Q':"baaaa",
    'R':"baaab",
    'S':"baaba",
    'T':"baabb",
    'U':"babaa",
    'V':"babab",
    'W':"babba",
    'X':"babbb",
    'Y':"bbaaa",
    'Z':"bbaab",
}
def zhuanhua(s):
    str1=""
    j=0
    for i in s:
        if ord(i)>64 and ord(i)<91:
            str1=str1+"b"
            j=j+1
        elif ord(i)>96 and ord(i)<123:
            str1=str1+'a'
            j=j+1
        if j==5:
            str1+=" "
            j=0
    return str1
def decode(s):
    cipher=""
    ss = s.split(" ")
    for c in ss:
        sign=True
        for k in codebook1.keys():
            if codebook1[k] == c:
                cipher+=k
                sign=False
                break
        if sign:
            #cipher+=c
            pass
    return(cipher)
a=zhuanhua(s)
b=decode(a)
print b
mingwen=""
for i in b:
    if i=="X":
        mingwen+=" "
    else:
        mingwen+=i
print mingwen.lower()

参考:
Wechall Wireup(一) - Jun_ay的博客 - CSDN博客

相关文章:

  • mac直接修改压缩包
  • servlet获取ApplicationContext容器对象
  • org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[createStandardContext]时发生异常
  • java.lang.ClassNotFoundException: org.springframework.context.support.ClassP
  • maven web-app没有新建servlet
  • org.springframework.beans.factory.BeanCreationException 一个解决方法
  • 注解支持的元素类型
  • LSB (Stegano, Image, Training) Write up
  • steganabara-1.1.1.jar
  • SpringMVC返回消息中文乱码的解决方法
  • NoSuchBeanDefinitionException: No bean named ‘cacheManager‘ available的一个解决方式
  • tomcat 首页404的一个解决方案
  • application-context.xml和spring-mvc.xml在web.xml中的配置
  • 谷歌自动广告导致网站样式出错 影响布局
  • Ubuntu18.04下 卸载wps 安装wps 的方法
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Codepen 每日精选(2018-3-25)
  • ComponentOne 2017 V2版本正式发布
  • ES6 学习笔记(一)let,const和解构赋值
  • HTTP那些事
  • python docx文档转html页面
  • python3 使用 asyncio 代替线程
  • socket.io+express实现聊天室的思考(三)
  • Vue ES6 Jade Scss Webpack Gulp
  • web标准化(下)
  • 基于游标的分页接口实现
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端面试题总结
  • 如何解决微信端直接跳WAP端
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 国内开源镜像站点
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​ssh免密码登录设置及问题总结
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (5)STL算法之复制
  • (k8s中)docker netty OOM问题记录
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十八)三元表达式和列表解析
  • (实战篇)如何缓存数据
  • (四)Android布局类型(线性布局LinearLayout)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .Net FrameWork总结
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET中的Exception处理(C#)
  • .pop ----remove 删除
  • /usr/bin/env: node: No such file or directory
  • ::什么意思
  • :中兴通讯为何成功
  • @RequestBody与@ModelAttribute
  • @RequestParam,@RequestBody和@PathVariable 区别