Training: Baconian (Stegano, Encoding, Crypto, Training)
题目描述
Encodings - Baconian
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!
编码-培根
在此培训挑战中,您必须在另一条消息中显示一条隐藏的消息。 众所周知,该消息是通过培根密码隐藏的。
同样,结果针对每个会话进行更改,并且由12个随机字符组成。
享受!
The Message
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.
解
培根密码_百度百科 (baidu.com)也是一种替换密码,明文中每个字母都被替换成一组五个的英文字母(只包含a,b),解密时只需对照字母表还原出明文即可。
使用两种字体或者大小写对密文进行隐写,将加密后的密文隐藏在其中,选择一种字体对应a,另一种字体对应b(大小写同理),密文即可隐写在其中。很明显这里使用了大小写作为密文载体,如果对消息中的标点符号有所疑问不确定其对应,或者大小写对应的a还是b不确定,可以穷举出所有结果再分析结果。
写个脚本提取出密文,在再解密网站上解出明文即可
text = r"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."
message = ''
text2 = ''
for i in text:
if 'a' <= i <= 'z':
message += 'A'
if 'A' <= i <= 'Z':
message += 'B'
for i in range(0, len(message), 5):
print(message[i:i+5], end='')
#BABABAABAABAAABBBAAABABBBBABBAAABAAABABBABABBBABBBAAABBABBBAABBABAABAABABBBAABABAABAAABABBABABBABBBABABBABABBBAABBBAAAAAAAABAABABAAABAABAAABBABBBBAABBAABBBAABAABABBBBAABAAABAAAAABABAAABAABAABAABBBABBBABABAAABAABBAAABABBAABBBABAAABAAABBBABBBABAAABAABABABBBBAAABAAAAABAABAAAABAAAAABAAAABBAAABAAAAAABBABBAABAAAABAABBBBBABBBBABBBABABABABABAABABABABABBABABAABABABAABBABABBBABABAABABBBABABAABABBABBABAABABABABBABABBABABAABAAABABBABBABBABBABABABABAABABABBABAABABBABBAABAABABABABAABABABABAABAABABBABABABABABBABABABABBBABABBABABABBABAABAABABBABABAABBABABABBAABAABBABBAABAABBAABAABABABABABBABABABABAABABABABAABAABABABABAABBABABABABBAABAABAABABAABABABBABAABABABBAABAABABAABABABAABABBAABABABABAABBABBABABABABABBABABABABABABABABBAABABABAABBABABAABAABBBAAABAABABABBABBABABABABAABABABAABABABBAABABABABABABABABABABABABAABBABBABABBABABABBAABABABABBABAABBBABBABABABABABABABABAABBABABABAABABBBABAABABABABBABABABAABBABAABABBAABABABAABAABABABABBABABABABAABABABBAABABABAABAABABABAABABBABABAABAABABABABBABABABABABABABBABBABAABABABABAABAABBABAABAABAABABAABABABABABAABABABAABABABABBBABABABABBABABABABABBABABABABABBABABABBABBABABBABABABBABAABABBABABAABAABABABABABAABABABABBAABBABAABBBABBABBABABBAABABAABAABABABABAABBAABABABABABAABABAABBABBAABABABABAABABABABABABABBABABABABABBAABABABABBABABABBABBABABABBAABAABABAABABABBABBAABABBAABABAABAABABABABABAABABABBABABABBAABABABABABAABABABBAABABAABABABABBABABBABABABBABBAABBABBABABBABBABAABAABABABABBBABABAABABABAABBABAABAABABBABABAB
观察一下不难发现明文中X对应空格,写个脚本替换一下就清晰很多。
message = 'V E R Y X W E L L X D O N E X F E L L O W X H A C K E R X T H E X S E C R E T X K E Y W O R D X I S X R A S C B B R A N S C P X X K V F K S U J O U W K W W U R N W V F N F W J K S V E W V L K X L K J N J V M T M T E V L K U V J F K N K Z E U V U V S K K S Z K T N K W V K V S U S O E V W V J K K Z K V K V J W W V S V U V K V J V J O S V V J U W K S K W V J L F J F J N J F L K V L N F K J U S K K V F J K K V N K W V W W V U W U S V J K Z U W W K J K T F K S T M V J K V N K W K W V W V S K K F S S K V F N L F K S W K K W W V W N V W S K X K K T J F V'
result = ''
for i in message:
if i == ' ':
continue
elif i == 'X':
result += ' '
else:
result += i
print(result)
#VERY WELL DONE FELLOW HACKER THE SECRET KEYWORD IS RASCBBRANSCP KVFKSUJOUWKWWURNWVFNFWJKSVEWVLK LKJNJVMTMTEVLKUVJFKNKZEUVUVSKKSZKTNKWVKVSUSOEVWVJKKZKVKVJWWVSVUVKVJVJOSVVJUWKSKWVJLFJFJNJFLKVLNFKJUSKKVFJKKVNKWVWWVUWUSVJKZUWWKJKTFKSTMVJKVNKWKWVWVSKKFSSKVFNLFKSWKKWWVWNVWSK KKTJFV
也可以直接写个Baconian加解密一气呵成,就当练练编程能力了
a = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
A = [i.upper() for i in a]
b1 = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","babaa","babab","babba","babbb","bbaaa","bbaab"]
B1 = [i.upper() for i in b1]
b2 = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","baabb","babaa","babab","babba","babbb"]
B2 = [i.upper() for i in b2]
#生成解码字母表
dedictionary = dict(zip(B1,A))
Keys = list(dedictionary.keys())
Values = list(dedictionary.values())
def Exmsg(message:str):
result = ''
for i in message:
if 'a' <= i <= 'z':
result += 'A'
if 'A' <= i <= 'Z':
result += 'B'
return result
def DeBaconian(message:str):
result = ''
for i in range(0,len(message),5):
if message[i:i+5] in Keys:
result += Values[Keys.index(message[i:i+5])]
return result
def Cutspaces(message:str):
result = ''
for i in message:
if i == ' ':
continue
elif i == 'X':
result += ' '
else:
result += i
return result
if __name__ == '__main__':
text = r"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."
message = Exmsg(text)
message = DeBaconian(message)
message = Cutspaces(message)
print(message)
#VERY WELL DONE FELLOW HACKER THE SECRET KEYWORD IS RASCBBRANSCP KVFKSUJOUWKWWURNWVFNFWJKSVEWVLK LKJNJVMTMTEVLKUVJFKNKZEUVUVSKKSZKTNKWVKVSUSOEVWVJKKZKVKVJWWVSVUVKVJVJOSVVJUWKSKWVJLFJFJNJFLKVLNFKJUSKKVFJKKVNKWVWWVUWUSVJKZUWWKJKTFKSTMVJKVNKWKWVWVSKKFSSKVFNLFKSWKKWWVWNVWSK KKTJFV
解出的可读部分:VERY WELL DONE FELLOW HACKER THE SECRET KEYWORD IS RASCBBRANSCP