|
Post by freshness on Oct 23, 2016 19:45:43 GMT -5
So, I know there are a few theories floating around about this Bridge Letter, but I think I've found some footing as to how it can be decoded. I figure I'd put the whole method out here so anyone who feels so inclined can try their hand at it. Bear with me though, because my method might be a little wonky. If anyone can clean it up or just has any better ideas, feel free to tack on. Or shoot me a PM...I'd love to hear what you think. From here on out, I'll "spoiler alert" the rest. **WARNING: LOOOOOOOOONG** Working backward from the decoded part, we can match up ciphertext sentences with plaintext sentences. One example is this: ".CDRCCLCOCMYACZICZCCCMC'BPOS,FCKXCCSCCLXMRCCC"is somehow going to translate to "Keep your eyes open, I won't be this obvious next time."So...here's how I think we get there. Step 1: Reversal The entire letter is backward, so the sentences need to be reversed. That leaves us with: CCCRMXLCCSCCKXCF,SOPB'CMCCCZCIZCAYMCOCLCCRDC. Step 2: Caesar shift Shifting the sentences two letters down (and not three, I'm not sure why) replaces all those crazy C's with A's and we get: AAAPKVJAAQAAIVAD,QMNZ'AKAAAXAGXAYWKAMAJAAPBA. Step 3: Removal At this point, we know that there is going to be some sort of Vigenere cipher applied later...which makes all these A's look completely out of place. Having that many of the same letter repeated like that is highly highly improbable. Highly. Since they don't make sense, let's go ahead and disregard them (for now). We'll replace them with dashes, sort of like little placeholders. That leaves: ---PKVJ--Q--IV-D,QMNZ'-K---X-GX-YWK-M-J--PB-. Step 4: ...Unremoval, I guess? While it's fair to assume that the multiple A's are most likely not part of the Vigenere cipher, it's unreasonable to think that EVERY SINGLE A is unimportant. So, the A's that were taken out incorrectly in step 3 have to be replaced. Unfortunately, this is where things get tricky. There is really no way to know which A's are good A's and which A's are bad A's, so there's some trial and error in this step. In this case, we already have the plaintext so we can work backwards and that makes it a little easier. As far as I can tell, there is only one A in the sentence that's a "good A", so we'll go ahead and replace it here. ---PKVJ--Q--IV-D,QMNZ'-K---X-GXAYWK-M-J--PB-. Step 5: Vigenere backwards! Now, we're in good shape to apply the Vigenere with the keyword "petroglyph". However, since the original text was backward and we flipped it in step 1, we'll have to also flip the key word in order to get it to work. In other words, Vigenere with the keyword "hyplgortep". A quick note here: replacing all the bad A's with the dashes like we did in steps 3 and 4 means that now the Vigenere decryption will essentially "skip over" all those dashes/placeholders. This is important. Without having removed the incorrect (and only the incorrect) A's, the keyword won't line up and the Vigenere won't decrypt properly. Another very important thing to mention is that, if we had applied the "petroglyph" to the message we had at the VERY very beginning, before we even reversed anything, the first key letter would be "p". It's the beginning of "petroglyph" and that makes sense. But, that doesn't mean the very next sentence would have "p" as the first key letter. In fact, without knowing where you are in the paragraph, the first key letter could be anything from "petroglyph". Add this to the fact that we reversed our ciphertext in step 1, and it's not always clear how the keyword lines up with our ciphertext. More problems. Again, we know the plaintext here, so we can cheat and it saves us a lot of heartache. In this case, our keyword lines up like this: ciphertext: ---PKVJ--Q--IV-D,QMNZ'-K---X-GXAYWK-M-J--PB-. keyword: ---YLGO--R--TE-P,HPYL'-G---O-RTEPHP-Y-L--GO-. That leaves us with: ---QYOU--Y--OQ-N,IWON'-D---I-ODVIOU-N-X--IM-. Step 6: Mirroring At this point, our message is getting closer to what we want. But, just by looking at it, those Q's look suspect and "ODVIOU-" is entirely too close to "obvious" to have been deciphered correctly. This is where the mirroring step comes in. Certain letters get replaced by the letters they "mirror". I like to think that, since we already reversed the sentences, now we're just reversing the shape of a few letters. There seem to be only four substitutions here: b --> d; d --> b; p --> q; q --> p (As a side note, these substitutions match up waaaay too nicely to not have been done on purpose by the original code-writer. Plus, the letter itself was printed in all uppercase, so it's probably not just some kind of error/typo.) It's a subtle step, but it changes our message in the right ways and now we have: ---PYOU--Y--OP-N,IWON'-B---I-OBVIOU-N-X--IM-. Step 7: Hangman Ok. Step 4 was tricky, but this one's a mess. When we disregarded those C's/A's, we left placeholders. Now, those placeholders need to be filled. There is ZERO guidance on how to do this, so this part is really all guesswork. Educated guesswork, but still guesswork. For whatever reason, the missing letters ssem to always be A, C, E, F, G, H, K, Q, R, S, or T. If this seems odd, that's pretty much because it is. I have not even an inkling as to why this is the case. In any event, we know the answer to this sentence, so we can fill in the dashes appropriately: KEEPYOUREYESOPEN,IWON'TBETHISOBVIOUSNEXTTIME. Admittedly, this method is fantastically messy. And there's a lot of guessing, so it may not seem like much a method at all. But, it's actually pretty consistent across the board. Take, for example, the very last sentence of the Bridge Letter and walk through the steps above: Original Message: .CCZCKBVGCEGFCCCJVFXCCBCCU
Step 1 - Reversal: UCCBCCXFVJCCCFGECGVBKCZCC.
Step 2 - Caesar Shift SAAZAAVDTHAAADECAETZIAAXA.
Step 3 - Removal S--Z--VDTH---DEC-ETZI--X-.
Step 4 - Unremoval (educated guess here was that no extra letters needed to be added) S--Z--VDTH---DEC-ETZI--X-.
Step 5 - Vigenere (key lines up as "ylgortephpylgo") T--N--OOBN---YOU-OUNB--I-.
Step 6 - Reversal: T--N--OODN---YOU-OUND--I-.
Step 7 - Hangman: THANKGOODNESSYOUFOUNDTHIS. Same for the next sentence: S:.CCKQSUIPOCSCCMCC'UCCSC 1:CSCCU'CCMCCSCOPIUSQKCC. 2:AQAAS'AAKAAQAMNGSQOIAA. 3:-Q--S'--K--Q-MNGSQOI--. 4:AQ--S'--K--Q-MNGSQOI--. 5:IW--N'--U--I-WOULBWO--. 6:IW--N'--U--I-WOULDWO--. 7:IWASN'TSUREITWOULDWORK. So, that's the general method I'm using. I've gotten answers that make sense for quite a few sentences but, with so much guesswork, I haven't filled in all the blanks yet. Here are some of the snippets I've found so far: "...in the open, in the hopes that they wouldn't think to look for him in public. I did the opposite. I disappeared. I don't know if they fell for my father's ruse, I don't know if they think I am dead or not. I am..."
"I need help. I cannot do this alone."
"I need to know if I can trust you, however. You might have stumbled...by accident, you might have followed someone else. I can't be sure and I can't..."
"I will be testing you. I hope you are who I am looking for. You have decoded this letter, so you know how the cyphers work. Keep them, I will use them in the future. If I mention the word apple, I am in fact talking about cypher one." That's everything I've got. Let me know if anything needs further (or clearer,...I know this is all kind of muddy) explanation or, even better, if you've cracked more code or found a way to improve on this slapped-together decryption method.
|
|
|
Post by Todd on Oct 24, 2016 6:05:05 GMT -5
Shifting the sentences two letters down (and not three, I'm not sure why) This is probably related to the Sharkysoft Vigenere software A.M. told us in the chat room that we needed to use. There's an offset of one character between their original encoder, sharkysoft.com/vigenere/1.0/ and the second version, sharkysoft.com/vigenere/.
|
|
chelseamc
Adjunct
Vault Cracker - Volume 1
"In this perplexity I was reduced to the last condition of mental despair..." -A New Era of Thought
Posts: 27
|
Post by chelseamc on Nov 15, 2016 12:43:48 GMT -5
Fantastic work! I had gotten some snippets, but nowhere near as much as you did. It has bothered me all this time that we don't know what the rest of the letter said, even if it is now irrelevant.
|
|
chelseamc
Adjunct
Vault Cracker - Volume 1
"In this perplexity I was reduced to the last condition of mental despair..." -A New Era of Thought
Posts: 27
|
Post by chelseamc on Nov 15, 2016 13:55:38 GMT -5
Fantastic work! I had gotten some snippets, but nowhere near as much as you did. It has bothered me all this time that we don't know what the rest of the letter said, even if it is now irrelevant.
|
|
|
Post by Geodus on Nov 24, 2016 18:01:42 GMT -5
Freshness' progress inspired me to work on the "unbroken" bridge letter puzzles. I made some progress as well. The first insight I had that helped me is that I realized that the order of operations (mirror, vigenere cipher, caesar cipher) was the order they were encrypted, not the order for decryption. His hint that you had to apply the vigenere keyword backwards was the clue that I needed. However, the first bit of trouble I ran into was that the text of the letter on the wiki (http://curios-and-conundrums.wikia.com/wiki/Bridge_Letter_Text) has a couple of transcription errors in it. Correcting for those allowed to a decrypt some additional text. The rest is spoiler flagged. NB. Figuring out where to place the "real" Cs is a huge pain. There's still a bit of garbled text here, because I needed placeholder Cs to make the cipher work out right, but they probably aren't all in the correct positions.
THANK GOODNESS YOU FOUND THIS. I WASN'T SURE IT WOULD WORK. I__D_O_N_____O__D_N_IN_M_NIN_U__B_____B_E_P__PD_TF_. D________'_F___B____PMOY_H_____H_L_SKDO_P_Q_W__GV__YON____UM_D_OM_ON__L____DIN_____D___IM________L___ MINU__. I AM SURE IT WOULD HAVE INSTEAD____M_IM__L_I_I__D____D, BU_ _____O____P THINKING I AM DEAD, __OBO__OU______.
THE FACT OF THE MATTER IS WE ARE BOTH HIDING IN OUR OWN WAY. HE HAS GONE OUT IN THE OPEN, IN THE HOPES THAT THEY WOULDN'T THINK TO LOOK FOR HIM IN PUBLIC. I DID THE OPPOSITE. I DISAPPEARED. I DON'T KNOW IF THEY FELL FOR MY FATHER'S RUSE, I DON'T KNOW IF THEY THINK I AM DEAD OR NOT. I AM NOT TAKING THAT CHANCE. THE CURATOR WILL PROTECT OUR TREASURES IN HIS OWN UNIQUE WAY, BUT HID DEEP IN HIS VAULT. I WILL CONTINUE THIS TASK.
I NEED HELP. I CANNOT DO THIS ALONE. I HOPE YOU LEFT SOME LETTERS FOR OTHERS TO FIND, OTHERS WHO HAVE YOUR KNACK FOR FOLLOWING RABBITS. I WILL NEED ANY WHO FIND THEIR WAY TO THE END. I NEED TO KNOW IF I CAN TRUST YOU, HOWEVER. YOU MIGHT HAVE STUMBLED ACROSS THIS BY ACCIDENT, YOU MIGHT HAVE FOLLOWED SOMEONE ELSE. I CAN'T BE SURE, AND I CAN'T TAKE CHANCES. I WILL BE TESTING YOU. I HOPE YOU ARE WHO I AM LOOKING FOR.
YOU HAVE DECODED THIS LETTER, SO YOU KNOW HOW THE CYPHERS WORK. KEEP THEM, I WILL USE THEM IN THE FUTURE. IF I MENTION THE WORD APPLE I AM IN FACT TALKING ABOUT CYPHER ONE. IF I MENTION THE WORD BALLROOM, I AM IN FACT TALKING ABOUT CYPHER TWO. IF I MENTION THE WORD CLAW, I AM IN FACT TALKING ABOUT CYPHER THREE.
TELL OTHERS ABOUT THE QUARTERLY THAT THE CURATOR IS PUTTING OUT. I WILL HIDE CLUES IN THERE. KEEP YOUR EYES OPEN, I WON'T BE THIS OBVIOUS NEXT TIME.
WELCOME TO THE FIRST STEP DOWN THE STAIRWELL. SEE YOU AT THE BOTTOM.
A.M.
|
|
|
Post by Geodus on Nov 26, 2016 18:48:38 GMT -5
I've made some additional progress on the Bridge Letter. I am very close to having it completely deciphered. Due to the large number of "C"s in the letter, each representing an unknown letter from a small subset of possibilities, this final bit is a lot of guesswork based on context. I have only a small handful of words and phrases left to solve. I am curious if anyone else has completely deciphered the letter? The wiki describes it as an unsolved puzzle. THANK GOODNESS YOU FOUND THIS. I WASN'T SURE IT WOULD WORK. I HAD TO ENCR__ SOME DANCING MEN IN _U__ BEFORE IT WENT TO PRINT. T__ DO____'_ O___N__I_ION I_L_____NOU______I_M_U__ EVERYONE ASSUMED SOMEONE ELSE HAD INSERTED THE IMAGE AT THE LAST MINUTE. I AM SURE HE WOULD HAVE INSERTED THEM HIMSELF IF I HAD ___ED, BUT SAFER TO KEEP THINKING I AM DEAD, SO I BO__OU______.
THE FACT OF THE MATTER IS WE ARE BOTH HIDING IN OUR OWN WAY. HE HAS GONE OUT IN THE OPEN, IN THE HOPES THAT THEY WOULDN'T THINK TO LOOK FOR HIM IN PUBLIC. I DID THE OPPOSITE. I DISAPPEARED. I DON'T KNOW IF THEY FELL FOR MY FATHER'S RUSE, I DON'T KNOW IF THEY THINK I AM DEAD OR NOT. I AM NOT TAKING THAT CHANCE. THE CURATOR WILL PROTECT OUR TREASURES IN HIS OWN UNIQUE WAY, BUT HID DEEP IN HIS VAULT. I WILL CONTINUE THIS TASK.
I NEED HELP. I CANNOT DO THIS ALONE. I HOPE YOU LEFT SOME LETTERS FOR OTHERS TO FIND, OTHERS WHO HAVE YOUR KNACK FOR FOLLOWING RABBITS. I WILL NEED ANY WHO FIND THEIR WAY TO THE END. I NEED TO KNOW IF I CAN TRUST YOU, HOWEVER. YOU MIGHT HAVE STUMBLED ACROSS THIS BY ACCIDENT, YOU MIGHT HAVE FOLLOWED SOMEONE ELSE. I CAN'T BE SURE, AND I CAN'T TAKE CHANCES. I WILL BE TESTING YOU. I HOPE YOU ARE WHO I AM LOOKING FOR.
YOU HAVE DECODED THIS LETTER, SO YOU KNOW HOW THE CYPHERS WORK. KEEP THEM, I WILL USE THEM IN THE FUTURE. IF I MENTION THE WORD APPLE I AM IN FACT TALKING ABOUT CYPHER ONE. IF I MENTION THE WORD BALLROOM, I AM IN FACT TALKING ABOUT CYPHER TWO. IF I MENTION THE WORD CLAW, I AM IN FACT TALKING ABOUT CYPHER THREE. TELL OTHERS ABOUT THE QUARTERLY THAT THE CURATOR IS PUTTING OUT. I WILL HIDE CLUES IN THERE. KEEP YOUR EYES OPEN, I WON'T BE THIS OBVIOUS NEXT TIME.
WELCOME TO THE FIRST STEP DOWN THE STAIRWELL. SEE YOU AT THE BOTTOM.
A.M.
|
|
|
Post by Todd on Nov 27, 2016 15:56:28 GMT -5
I had cross-referenced most of your first transcript with my own notes and found your work to be quite good. I believe I had one instance where there was the Vigenere key had to skip a letter, but I intended to go back to the initial letter and verify my transcription. Now I find you've chipped away at it further.
Nice work to all. It may be another week before I have a chance to further review.
|
|
|
Post by Geodus on Nov 27, 2016 18:57:58 GMT -5
If anyone is particularly interested in my process for working on the cipher, here is a small C++ program I crudely put together to work on it. You can see my decoded plain text in the comments below each line of (reversed) cipher text. As I posted previously, the initial work was determining where the "real" Cs go. I started the same way as freshness -- replacing them all with non-encoded (I called them Unknown) characters ("_"), and then working my way backwards from the end of the text and testing for possibilities that revealed credible looking letter combinations. If I saw adjacent letters like "RZX", I knew there were one or more missing Cs before (after in the mirrored text) the garbled letters. Sometimes I had to play around with the position of the Cs (I might know it was between two sections of text, but not sure exactly where). Once I had the Cs roughly where they belonged, the next step was making guesses at the text based on particular letter combinations (such as W_O likely being the word "WHO"), and working the process to adjacent text based on context. There is an incredible amount of guesswork involved, but I determined one very useful axiom: unknown letters (marked with "_") are limited to the set S of { A, C, E, F, G, H, K, Q, R, S , T }, and its converse: decrypted letters (with one exception) are never from S. The converse part also helped in determining where the real Cs went -- if downstream letters decoded into letters from S, the C was in the wrong position. The one exception is that on three occurrences the first letter of a sentence will decode into a "T". I'm not sure why this is, but I have little doubt that the places it occurs are valid. If anyone has any guesses about the remaining bit of unknown text, please share! It would be fantastic to finally solve to completion.
// BRIDGE CYPHER SOLVER #include <windows.h> #include <string>
// Unknown letters (represented here by "_") can be any of ACEFGHKQRST
const char* sReversedEncryptedText = \ "U__B_ _XFVJ___ FGE _GVBK __Z_. C S__U'_ _M__ S_ OPIUS QK__. P __T _Y _F___ __P__ P_W_ZH_ I_U AX _M__ EC____ R_ N_H_ _K X_AX_.\n" //THANK GOODNESS YOU FOUND THIS. I WASN'T SURE IT WOULD WORK. I HAD TO ENTER THOSE DANCING MEN IN RUSH BEFORE IT WENT TO PRINT. "L__ CC____'_ X___E_C__EVF S_D___C_O_D______ Z _G _Q__ _C__QYF_ ___VA_K _FG_KU_ _D__ __L AO_____P ___ RD___ __ ___ F___ IPFE__.\n" //T__ DO____'_ O___N_I_TION I_L___D_A_U______ I AM SURE EVERYONE ASSUMED SOMEONE ELSE HAD INSERTED THE IMAGE AT THE LAST MINUTE. "A _N _I__ __ FFOHI __N_ SF_____C ___A _RD__F_ E_ P __T ____L, VV_ _____ _C ___Z __ZH_EU_ A _W T__C, __ C MF__IQ______.\n" //I AM SURE HE WOULD HAVE INSERTED THEM HIMSELF IF I HAD ____D, BUT SAFER TO KEEP FEINTING I AM DEAD, SO I BO__OU______.
"\n" "A__ ____ G_ ___ W_____ A_ X_ ___ RX__ _ZVEU_ AX GV_ CFE Q_U. O_ ___ _GX_ GV_ WW ___ FK_J, PF ___ _YI__ ____ ___Z KXLFXU'_ __AX_ _G MCX_ _F_ _CI PF AMEZR_.\n" //THE FACT OF THE MATTER IS WE ARE BOTH HIDING IN OUR OWN WAY. HE HAS GONE OUT IN THE OPEN, IN THE HOPES THAT THEY WOULDN'T THINK TO LOOK FOR HIM IN PUBLIC. "Z VEI ___ GAIP_W__. R SC___M____I. A LGO'_ _BXN C_ ___U __SD _Y_ EZ ______'_ _I__, R SIJ'_ _UGG A_ ___Z __WW_ Z _G X__I G_ XG_.\n" //I DID THE OPPOSITE. I DISAPPEARED. I DON'T KNOW IF THEY FELL FOR MY FATHER'S RUSE, I DON'T KNOW IF THEY THINK I AM DEAD OR NOT. "J _A WF_ ___CJ_ ____ ___U__. L__ _E___G_ XWUC K_K____ VM_ _____E___ AO _W_ XNH QUAZM_ X_M, ML_ _CX I__I SF _J_ J_DC_. C SPDV _GO_WWL_ __C_ ____.\n" //I AM NOT TAKING THAT CHANCE. THE CURATOR WILL PROTECT OUR TREASURES IN HIS OWN UNIQUE WAY, BUT HID DEEP IN HIS VAULT. I WILL CONTINUE THIS TASK. "\n" "E U__T __VI. J __BWF_ VK __P_ _DYF_. J _CZ_ PIQ S___ _GW_ D______ _P_ C_____ _X _ZHX, V_____ O_Y __N_ ZCD_ _E___ _I_ _KSDYOJB_ __MUC__.\n" //I NEED HELP. I CANNOT DO THIS ALONE. I HOPE YOU LEFT SOME LETTERS FOR OTHERS TO FIND, OTHERS WHO HAVE YOUR KNACK FOR FOLLOWING RABBITS. "E DAVD O__P _WP Q_K _PFL ___A_ X_M _X ___ _EV. E U__T _Y _FPK R_ Z __H __Q__ FGE, _GX_J__. HFO IP___ __N_ __EEEZ_K ___F__ __C_ ZF ___AL_F_,\n" //I WILL NEED ANY WHO FIND THEIR WAY TO THE END. I NEED TO KNOW IF I CAN TRUST YOU, HOWEVER. YOU MIGHT HAVE STUMBLED ACROSS THIS BY ACCIDENT, "ZCD DC___ __R_ _VDVGX_P _XD_IJ_ _S__. A __X'_ V_ _V__, _BK Z __H'_ ____ ___J___. P OSDM R_ ____RE_ SKB. A _YI_ ZCD ___ N_I E _T DYG_JB_ _X_.\n" //YOU MIGHT HAVE FOLLOWED SOMEONE ELSE. I CAN'T BE SURE, AND I CAN'T TAKE CHANCES. I WILL BE TESTING YOU. I HOPE YOU ARE WHO I AM LOOKING FOR. "\n" "PIQ __C_ T__YT_C __W_ U_____, _F SKB _FYO _PK ___ _HH____ QK__. ___X ___E, S OJZU L__ ___G EU ___ _M_E__. A_ J A_W_ZIJ ___ DG_L SREU_ Z _G EU ____ __D_SF_ _ECD_ _PK___ KU_.\n" //YOU HAVE DECODED THIS LETTER, SO YOU KNOW HOW THE CYPHERS WORK. KEEP THEM, I WILL USE THEM IN THE FUTURE. IF I MENTION THE WORD APPLE I AM IN FACT TALKING ABOUT CYPHER ONE. "A_ S E_O_WXE ___ QK_I __DV_GPA, R _D CJ ____ __S_AX_ _VPI_ _HH___ _QK. P_ A W_F_JCW ___ NI_X _S_O, S _E JB ____ __U_ZH_ _ZVM_ _II___ _____.\n" //IF I MENTION THE WORD BALLROOM, I AM IN FACT TALKING ABOUT CYPHER TWO. IF I MENTION THE WORD CLAW, I AM IN FACT TALKING ABOUT CYPHER THREE. "\n" "U_ZU F_____ _XKB_ ___ _M_____VQ ____ ___ _V___C_ R_ HO__EU_ GE_. A XWUC _CX_ _SM__ SF _____. ___R MXL_ _S__ KX_F, S OPB'_ M_ __Z_ IZCAYM_ O_L_ _RD_.\n" //TELL OTHERS ABOUT THE QUARTERLY THAT THE CURATOR IS PUTTING OUT. I WILL HIDE CLUES IN THERE. KEEP YOUR EYES OPEN, I WON'T BE THIS OBVIOUS NEXT TIME. "\n" "Q_H_VE_ _Y ___ _A___ ___R PXNH ___ ___E_D_DV. ___ QPI __ ___ MF__II.\n" //WELCOME TO THE FIRST STEP DOWN THE STAIRWELL. SEE YOU AT THE BOTTOM. "H.E.\n"; //A.M.
const char* sVigenereKey = "PETROGLYPH"; const int kCaesarShift = 3; const char* sMirrorSwap = "ADCBEFGHIJKLMNOQPRSTUVWXYZ";
inline bool IsAlpha(char c) { return c >= 'A' && c <= 'Z'; }
std::string DoVigenere(const std::string& sIn, const std::string& sKey) { int keyLength = sKey.length(); int keyIndex = 0; std::string sOut; for (int i = 0; i < (int)sIn.length(); i++) { char cIn = sIn[i]; char cOut = cIn; if (IsAlpha(cIn)) { cOut = (((cIn - 65) - (sKey[keyIndex % keyLength] - 65) + 26) % 26) + 65; keyIndex = (keyIndex + 1) % keyLength; } sOut += cOut; } return sOut; }
std::string DoCaesarShift(const std::string sIn, int shift) { std::string sOut; for (int i = 0; i < (int)sIn.length(); i++) { char cIn = sIn[i]; char cOut = cIn; if (IsAlpha(cIn)) { cOut = ((cIn - 65) + shift + 26) % 26 + 65; } sOut += cOut; } return sOut; }
std::string MirrorText(const std::string sIn, bool mirrorLetters) { std::string sOut; for (int i = (int)sIn.length() - 1; i >= 0; --i) { char cIn = sIn[i]; char cOut = cIn; if (IsAlpha(cIn) && mirrorLetters) { cOut = sMirrorSwap[cIn - 65]; } sOut += cOut; } return sOut; }
int main() { std::string result; result = MirrorText(sReversedEncryptedText, false); result = DoVigenere(result, sVigenereKey); result = DoCaesarShift(result, -kCaesarShift); result = MirrorText(result, true); OutputDebugStringA(result.c_str()); }
The output of the program looks like this, so you can see how much guesswork is involved:
T__N_ _OODN___ YOU _OUND __I_. I W__N'_ _U__ I_ WOULD WO__. I __D _O _N___ __O__ D_N_IN_ M_N IN _U__ BO____ I_ W_N_ _O P_IN_. T__ DO____'_ O___N_I__ION I_L___D_A_U______ I _M _U__ _V__YON_ ___UM_D _OM_ON_ _L__ __D IN_____D ___ IM___ __ ___ L___ MINU__. I _M _U__ __ WOULD __V_ IN_____D ___M _IM__L_ I_ I __D ____D, BU_ _____ _O ___P __IN_IN_ I _M D__D, __ O BO__OU______.
T__ ____ O_ ___ M_____ I_ W_ ___ BO__ _IDIN_ IN OU_ OWN W_Y. H_ ___ _ON_ OU_ IN ___ OP_N, IN ___ _OP__ ____ ___Y WOULDN'_ __IN_ _O LOO_ _O_ _IM IN PUBLI_. I DID ___ OPPO_I__. I DI___P____D. I DON'_ _NOW I_ ___Y __LL _O_ MY ______'_ _U__, I DON'_ _NOW I_ ___Y __IN_ I _M D__D O_ NO_. I _M NO_ ___IN_ ____ ___N__. T__ _U___O_ WILL P_O____ OU_ _____U___ IN _I_ OWN UNIQU_ W_Y, BU_ _ID D__P IN _I_ V_UL_. I WILL _ON_INU_ __I_ ____.
I N__D __LP. I __NNO_ DO __I_ _LON_. I _OP_ YOU L___ _OM_ L______ _O_ O_____ _O _IND, O_____ W_O __V_ YOU_ _N___ _O_ _OLLOWIN_ __BBI__. I WILL N__D _NY W_O _IND ___I_ W_Y _O ___ _ND. I N__D _O _NOW I_ I __N __U__ YOU, _OW_V__. YOU MI___ __V_ __UMBL_D ___O__ __I_ BY ___ID_N_, YOU MI___ __V_ _OLLOW_D _OM_ON_ _L__. I __N'_ B_ _U__, _ND I __N'_ ____ ___N___. I WILL B_ ____IN_ YOU. I _OP_ YOU ___ W_O I _M LOO_IN_ _O_.
YOU __V_ D__OD_D __I_ L_____, _O YOU _NOW _OW ___ _YP____ WO__. ___P ___M, I WILL U__ ___M IN ___ _U_U__. I_ I M_N_ION ___ WO_D APPL_ I _M IN ____ __L_IN_ _BOU_ _YP___ ON_. I_ I M_N_ION ___ WO_D __LL_OOM, I _M IN ____ __L_IN_ _BOU_ _YP___ _WO. I_ I M_N_ION ___ WO_D _L_W, I _M IN ____ __L_IN_ _BOU_ _YP___ _____.
T_LL O_____ _BOU_ ___ _U_____LY ____ ___ _U___O_ I_ PU__IN_ OU_. I WILL _ID_ _LU__ IN _____. ___P YOU_ _Y__ OP_N, I WON'_ B_ __I_ OBVIOU_ N_X_ _IM_.
W_L_OM_ _O ___ _I___ ___P DOWN ___ ___I_W_LL. ___ YOU __ ___ BO__OM.
A.M.
|
|
|
Post by Geodus on Dec 1, 2016 1:08:07 GMT -5
I keep chipping away at this and made some more progress on the first paragraph: I'm showing the reversed vignere encrypted text above each line, so you can see how much is guesswork. As noted previously, any text with a "C" in it can have that decrypted "C" float between adjacent letters, so if you have ideas about the missing sections, they're welcome!
U__B_ _XFVJ___ FGE _GVBK __Z_. C S__U'_ _M__ S_ OPIUS QK__. P __T _Y _F___ __P__ P_W_ZH_ I_U AX _M__ EC____ R_ N_H_ _K X_AX_. THANK GOODNESS YOU FOUND THIS. I WASN'T SURE IT WOULD WORK. I HAD TO ENTER THOSE DANCING MEN IN RUSH BEFORE IT WENT TO PRINT.
L__ CC____'_ X___EC___EVF S_ D__C__O_D______ Z _G _Q__ _C__QYF_ ___VA_K _FG_KU_ _D__ __L AO_____P ___ RD___ __ ___ F___ IPFE__. THE DO____'s ORGANISATION Is L__D__A_U______ I AM SURE EVERYONE ASSUMED SOMEONE ELSE HAD INSERTED THE IMAGE AT THE LAST MINUTE.
A _N _I__ __ FFOHI __N_ SF_____C ___A _RD__F_ E_ P __T ____L, VV_ _____ _C ___Z __ZH_EU_ A _W T__C, C__ MF__ IQ_ _____. I AM SURE HE WOULD HAVE INSERTED THEM HIMSELF IF I HAD ____D, BUT SAFER TO KEEP FEINTING I AM DEAD, FOR BOTH OUR SAKES.
|
|
|
Post by Todd on Dec 1, 2016 6:51:14 GMT -5
|
|
|
Post by Geodus on Dec 1, 2016 22:08:12 GMT -5
Oh my. That is so obvious now.
|
|
|
Post by landau on Jan 6, 2017 15:36:05 GMT -5
Following in the footsteps of freshness and Geodus, I have taken a stab at filling in the full letter. I think the encryption method used is: (1) Mirror invert the characters that can do that: b<>d, p<>q. "back of the mirror"
(2) Reverse the message, that is enter it from the last character to the first character. "backwards 2"
(2a) Do Vignere cipher, er cypher, with "petroglyph" as the key. "Vignere likes a good petroglyph"
(3) Caesar shift everything by three characters. "Recipe with three servings".
But these steps do not explain the long runs of c's that freshness and Geodus pointed out. So, there is a step zero: (0) Strike out all characters in the plain text that are from a certain set S. This is a bit tricky, as it destroys information and renders the decryption process non-unique. Proceed with the encryption steps on the remaining letters.
To decrypt, the steps must be reversed. Following Geodus: A fair amount of guesswork is required. How to determine which c's actually stay? Since they are real encrypted c's they must have come from the encryption process without strikeouts. Thus, they come from {k, v, g, i, l, t, o, d, s}; they answer what plain text can end up as a c? So inserting a real c will create one of these letters. Running through the whole message, and trying this out, you find that only {v, i, o, l, d} actually show up. So, the remaining letters {k, g, t, s} must be strikeouts in the plain text. Further, when inserting these real c's, the position they go in is not unique, they can go anywhere withing one run of c's. Looking at the message as one tries out the real c's in various positions provides hints in that parts of the message that were gobbledygook before now start to look like English fragments and words.
With a small number of exceptions, I get what Geodus got. In fact, I relied on what Geodus uncovered, to further my own guesses. Now the encrypted text has the correct c's restored, at least to within a run of c's, which I, just like freshness and Geodus, converted to "_" to represent unknown characters. Now, the game of hangman must be played. The set of struck out characters S, contains more than just {k, g, t, s}. Just look at the number of blanks, about one-half of the message is missing, in essence. For this, using the modified bridge letter which does decrypt without strikeouts we can get a list of characters that were struck out. I find S = {a,b,d,e,f,g,h,k,r,s,t,q,j}. This list is slightly different than that of Geodus. And even with this, there are a couple of exceptions in the finished product.
I ended up breaking the text into sentences. Here is what I finally came up with. For each sentence there are three lines: (1) the encrypted text (2) decrypted text with blanks (3) as in (2), but now with the blanks filled in by pulling from S, and trying to have it all make sense.
u__b__xfvj___fge_gvbk__z_. t__n__oodn___you_ound__i_. thankgoodnessyoufoundthis.
cs__u'__m__s_opiusqk__. iw__n'__u__i_wouldwo__. iwasn'tsureitwouldwork.
p__t_y_f_____p__p_w_zh_i_uax_m__e__c__r_n_h__kx_ax_. i__d_o_n_____o__d_n_in_m_nin_u__b__o__i_w_n__op_in_. ihadtoenterthosedancingmeninjustbeforeitwenttoprint.
l___v___c_'_x___ec___evfs_d_____ocd______z_g_q___c__qyf____va_k_fg_ku__d____lao_____p___rd________f___ipfe__. t___u___o_'_o___ni___ioni_l_____nou______i_m_u___v__yon____um_d_om_on__l____din_____d___im________l___minu__. thecurator'sorganisationislargeenoughthatiamsureeveryoneassumedsomeoneelsehadinsertedtheimageatthelastminute.
a_n_i____ffohi__n_sf_____c___a_rd__f_e_p__t____l,vv_______c___z__zh_eu_a_wt__c,_c_mf__iq______. i_m_u____would__v_in_____d___m_im__l_i_i__d____d,bu_______o___p__in_in_i_md__d,_o_bo__ou______. iamsurehewouldhaveinsertedthemhimselfifihadasked,buthehastokeepthinkingiamdead,forbothoursakes.
a______g____w_____a_x____rx___zveu_axgv_cfeq_u. t______o____m_____i_w____bo___idin_inou_ownw_y. thefactofthematteriswearebothhidinginourownway.
o_____gx_gv_ww___fk_j,pf____yi_________zkxlfxu'___ax__gmcx__f__cipfamezr_. h_____on_ou_in___op_n,in____op_________ywouldn'___in__oloo__o__iminpubli_. hehasgoneoutintheopen,inthehopesthattheywouldn'tthinktolookforhiminpublic.
zvei___gaip_w__. idid___oppo_i__. ididtheopposite.
rsc___m____i. idi___p____d. idisappeared.
algo'__bxnc____u__sd_y_ez______'__i__,rsij'__ugga____z__ww_z_gx__ig_xg_. idon'__nowi____y__ll_o_my______'__u__,idon'__nowi____y__in_i_md__do_no_. idon'tknowiftheyfellformyfather'sruse,idon'tknowiftheythinkiamdeadornot.
j_awf____cj________u__. i_mno____in________n__. iamnottakingthatchance.
l___e___g_xwuck_k____vm______e___ao_w_xnhquazm_x_m,ml_c_xi__isf_j_j_dc_. t___u___o_willp_o____ou______u___in_i_ownuniqu_w_y,bu_i_dd__pin_i_v_ul_. thecuratorwillprotectourtreasuresinhisownuniqueway,burieddeepinhisvault.
cspdv_go_wwl_____c___. iwill_on_inu_____i___. iwillcontinuethefight.
eu__t__vi. in__d__lp. ineedhelp.
j__bwf_vk__p__dyf_. i__nno_do__i__lon_. icannotdothisalone.
j_cz_piqs____gw_d_______p_c______x_zhx,v_____o_y__n_zcd__e____i__ksdyojb___muc__. i_op_youl____om_l_______o_o______o_ind,o_____w_o__v_you__n____o__ollowin___bbi__. ihopeyouleftsomelettersforotherstofind,otherswhohaveyourknackforfollowingrabbits.
edavdo__p_wpq_k_pfl___a_x_m_x____ev. iwilln__d_nyw_o_ind___i_w_y_o____nd. iwillneedanywhofindtheirwaytotheend.
eu__t_y_fpkr_z__h__q__fge,_gx_j__. in__d_o_nowi_i__n__u__you,_ow_v__. ineedtoknowificantrustyou,however.
hfoip_____n___eeez_k___f____c_zf___al_f_,zcddc_____r__vdvgx_p_xd_ij__s__. youmi_____v___umbl_d___o____i_by___id_n_,youmi_____v__ollow_d_om_on__l__. youmighthavestumbledacrossthisbyaccident,youmighthavefollowedsomeoneelse.
a__x'_v__v__,_bkz__h'________j___. i__n'_b__u__,_ndi__n'________n___. ican'tbesure,andican'ttakechances.
posdmr_____re_skb. iwillb_____in_you. iwillbeseekingyou.
a_yi_zcd___n_ie_tdyg_jb__x_. i_op_you___w_oi_mloo_in__o_. ihopeyouarewhoiamlookingfor.
piq__c_t__yt_c__w_u_____,_fskb_fyo_pk____hh____qk__. you__v_d__od_d__i_l_____,_oyou_now_ow____yp____wo__. youhavedecodedthisletter,soyouknowhowthecypherswork.
___x___e,sojzul_____geu____m_e__. ___p___m,iwillu_____min____u_u__. keepthem,iwillusetheminthefuture.
a_ja_w_zij___dg_lsreu_,z_geu______d_sf__ecd__pk___ku_. i_im_n_ion___wo_dappl_,i_min______l_in__bou__yp___on_. ifimentionthewordapple,iaminfacttalkingaboutcypherone.
a_se_o_wxe___qk_i__dv_gpa,r_dcj______s_ax__vpi__hh____qk. i_im_n_ion___wo_d__ll_oom,i_min______l_in__bou__yp____wo. ifimentionthewordballroom,iaminfacttalkingaboutcyphertwo.
p_aw_f_jcw___ni_x_s_o,s_ejb______u_zh__zvm__ii________. i_im_n_ion___wo_d_l_w,i_min______l_in__bou__yp________. ifimentionthewordclaw,iaminfacttalkingaboutcypherthree.
u_zuf______xkb_____m_____vq________v___c_r_ho__eu_ge_. t_llo______bou_____u_____ly________u___o_i_pu__in_ou_. tellothersaboutthequarterlythatthecuratorisputtingout.
axwuc_cx__sm__sf_____. iwill_id__lu__in_____. iwillhidecluesinthere.
___rmxl__s__kx_f,sopb'_m___z_izcaym_o_l__rd_. ___pyou__y__op_n,iwon'_b___i_obviou_n_x__im_. keepyoureyesopen,iwon'tbethisobviousnexttime.
q_h_ve__y____a______rpxnh______e_d_dv. w_l_om__o____i______pdown______i_w_ll. welcometothefirststepdownthestairwell.
___qpi_____mf__ii. ___you_____bo__om. seeyouatthebottom.
h.e a.m a.m.
There are a couple of exceptions to the process, but I guess it is possible that there are real errors, or I just messed up. The line "I disappeared" is an exception as "p" doesn't come from S, but is still from a blank.
q shows up in "quarterly" so it implies it should be in S, but earlier in the missive, "unique" shows up as properly decrypted, indicating that q shouldn't be in S.
Also, "I will be seeking you", seeking could be testing, or tasking. EDIT: fixed some formatting.
|
|
|
Post by Todd on Jan 6, 2017 16:17:36 GMT -5
|
|
|
Post by k80 on Jan 6, 2017 18:22:17 GMT -5
Wow. You guys are so clever, seriously. I'm amazed.
|
|
|
Post by Geodus on Jan 6, 2017 19:46:17 GMT -5
Well done! Looking at your solution, I realized that I had a transcription error at the beginning of the 4th sentence. Argh! That made all the difference.
|
|