[{"data":1,"prerenderedAt":581},["ShallowReactive",2],{"navigation_docs":3,"-ciphers-straddling-checkerboard":276,"-ciphers-straddling-checkerboard-surround":576},[4,36],{"title":5,"path":6,"stem":7,"children":8,"icon":35},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Encode and decode","\u002Fguide\u002Ftransform","1.guide\u002F02.transform",{"title":16,"path":17,"stem":18},"Analysis","\u002Fguide\u002Fanalysis","1.guide\u002F03.analysis",{"title":20,"path":21,"stem":22},"CLI","\u002Fguide\u002Fcli","1.guide\u002F04.cli",{"title":24,"path":25,"stem":26},"Agents","\u002Fguide\u002Fagents","1.guide\u002F05.agents",{"title":28,"path":29,"stem":30},"Custom ciphers","\u002Fguide\u002Fcustom","1.guide\u002F06.custom",{"title":32,"path":33,"stem":34},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F07.playground","i-lucide-book-open",{"title":37,"path":38,"stem":39,"children":40,"icon":275},"Ciphers","\u002Fciphers","2.ciphers\u002F00.index",[41,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271],{"title":42,"path":38,"stem":39},"Overview",{"title":44,"path":45,"stem":46},"Classical","\u002Fciphers\u002Fclassical","2.ciphers\u002F01.classical",{"title":48,"path":49,"stem":50},"Caesar","\u002Fciphers\u002Fcaesar","2.ciphers\u002F02.caesar",{"title":52,"path":53,"stem":54},"ROT-13","\u002Fciphers\u002Frot13","2.ciphers\u002F03.rot13",{"title":56,"path":57,"stem":58},"ROT-47","\u002Fciphers\u002Frot47","2.ciphers\u002F04.rot47",{"title":60,"path":61,"stem":62},"Atbash","\u002Fciphers\u002Fatbash","2.ciphers\u002F05.atbash",{"title":64,"path":65,"stem":66},"Affine","\u002Fciphers\u002Faffine","2.ciphers\u002F06.affine",{"title":68,"path":69,"stem":70},"Vigenère","\u002Fciphers\u002Fvigenere","2.ciphers\u002F07.vigenere",{"title":72,"path":73,"stem":74},"Beaufort","\u002Fciphers\u002Fbeaufort","2.ciphers\u002F08.beaufort",{"title":76,"path":77,"stem":78},"Autokey","\u002Fciphers\u002Fautokey","2.ciphers\u002F09.autokey",{"title":80,"path":81,"stem":82},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F10.trithemius",{"title":84,"path":85,"stem":86},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F11.alberti",{"title":88,"path":89,"stem":90},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F12.playfair",{"title":92,"path":93,"stem":94},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F13.polybius",{"title":96,"path":97,"stem":98},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F14.morse",{"title":100,"path":101,"stem":102},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F15.bacon",{"title":104,"path":105,"stem":106},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F16.tap-code",{"title":108,"path":109,"stem":110},"A1Z26","\u002Fciphers\u002Fa1z26","2.ciphers\u002F17.a1z26",{"title":112,"path":113,"stem":114},"Book cipher","\u002Fciphers\u002Fbook","2.ciphers\u002F18.book",{"title":116,"path":117,"stem":118},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F19.adfgvx",{"title":120,"path":121,"stem":122},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F20.bifid",{"title":124,"path":125,"stem":126},"Straddling checkerboard","\u002Fciphers\u002Fstraddling-checkerboard","2.ciphers\u002F21.straddling-checkerboard",{"title":128,"path":129,"stem":130},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F22.rail-fence",{"title":132,"path":133,"stem":134},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F23.columnar",{"title":136,"path":137,"stem":138},"Route transposition","\u002Fciphers\u002Froute","2.ciphers\u002F24.route",{"title":140,"path":141,"stem":142},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F25.enigma",{"title":144,"path":145,"stem":146},"Block","\u002Fciphers\u002Fblock","2.ciphers\u002F26.block",{"title":148,"path":149,"stem":150},"AES (ECB)","\u002Fciphers\u002Faes","2.ciphers\u002F27.aes",{"title":152,"path":153,"stem":154},"AES (CBC)","\u002Fciphers\u002Faes-cbc","2.ciphers\u002F28.aes-cbc",{"title":156,"path":157,"stem":158},"AES (CFB)","\u002Fciphers\u002Faes-cfb","2.ciphers\u002F29.aes-cfb",{"title":160,"path":161,"stem":162},"AES (OFB)","\u002Fciphers\u002Faes-ofb","2.ciphers\u002F30.aes-ofb",{"title":164,"path":165,"stem":166},"AES (CTR)","\u002Fciphers\u002Faes-ctr","2.ciphers\u002F31.aes-ctr",{"title":168,"path":169,"stem":170},"AES (CCM)","\u002Fciphers\u002Faes-ccm","2.ciphers\u002F32.aes-ccm",{"title":172,"path":173,"stem":174},"AES (OCB)","\u002Fciphers\u002Faes-ocb","2.ciphers\u002F33.aes-ocb",{"title":176,"path":177,"stem":178},"AES (LRW)","\u002Fciphers\u002Faes-lrw","2.ciphers\u002F34.aes-lrw",{"title":180,"path":181,"stem":182},"AES (XTS)","\u002Fciphers\u002Faes-xts","2.ciphers\u002F35.aes-xts",{"title":184,"path":185,"stem":186},"AES (CBC-MAC)","\u002Fciphers\u002Faes-cbc-mac","2.ciphers\u002F36.aes-cbc-mac",{"title":188,"path":189,"stem":190},"AES (passphrase)","\u002Fciphers\u002Faes-passphrase","2.ciphers\u002F37.aes-passphrase",{"title":192,"path":193,"stem":194},"Rijndael (ECB)","\u002Fciphers\u002Frijndael","2.ciphers\u002F38.rijndael",{"title":196,"path":197,"stem":198},"DES (ECB)","\u002Fciphers\u002Fdes","2.ciphers\u002F39.des",{"title":200,"path":201,"stem":202},"DESX (ECB)","\u002Fciphers\u002Fdesx","2.ciphers\u002F40.desx",{"title":204,"path":205,"stem":206},"Triple DES (ECB)","\u002Fciphers\u002Ftriple-des","2.ciphers\u002F41.triple-des",{"title":208,"path":209,"stem":210},"Triple DES (CBC)","\u002Fciphers\u002Ftriple-des-cbc","2.ciphers\u002F42.triple-des-cbc",{"title":212,"path":213,"stem":214},"Blowfish (ECB)","\u002Fciphers\u002Fblowfish","2.ciphers\u002F43.blowfish",{"title":216,"path":217,"stem":218},"IDEA (ECB)","\u002Fciphers\u002Fidea","2.ciphers\u002F44.idea",{"title":220,"path":221,"stem":222},"Lucifer (ECB)","\u002Fciphers\u002Flucifer","2.ciphers\u002F45.lucifer",{"title":224,"path":225,"stem":226},"MARS (ECB)","\u002Fciphers\u002Fmars","2.ciphers\u002F46.mars",{"title":228,"path":229,"stem":230},"Serpent (ECB)","\u002Fciphers\u002Fserpent","2.ciphers\u002F47.serpent",{"title":232,"path":233,"stem":234},"CAST5 (ECB)","\u002Fciphers\u002Fcast5","2.ciphers\u002F48.cast5",{"title":236,"path":237,"stem":238},"OpenPGP (passphrase)","\u002Fciphers\u002Fopenpgp","2.ciphers\u002F49.openpgp",{"title":240,"path":241,"stem":242},"Stream","\u002Fciphers\u002Fstream","2.ciphers\u002F50.stream",{"title":244,"path":245,"stem":246},"Rabbit","\u002Fciphers\u002Frabbit","2.ciphers\u002F51.rabbit",{"title":248,"path":249,"stem":250},"RC4","\u002Fciphers\u002Frc4","2.ciphers\u002F52.rc4",{"title":252,"path":253,"stem":254},"XOR","\u002Fciphers\u002Fxor","2.ciphers\u002F53.xor",{"title":256,"path":257,"stem":258},"Salsa20","\u002Fciphers\u002Fsalsa20","2.ciphers\u002F54.salsa20",{"title":260,"path":261,"stem":262},"XSalsa20","\u002Fciphers\u002Fxsalsa20","2.ciphers\u002F55.xsalsa20",{"title":264,"path":265,"stem":266},"ChaCha20","\u002Fciphers\u002Fchacha20","2.ciphers\u002F56.chacha20",{"title":268,"path":269,"stem":270},"XChaCha20","\u002Fciphers\u002Fxchacha20","2.ciphers\u002F57.xchacha20",{"title":272,"path":273,"stem":274},"ChaCha20-Poly1305","\u002Fciphers\u002Fchacha20-poly1305","2.ciphers\u002F58.chacha20-poly1305","i-lucide-library",{"id":277,"title":124,"body":278,"description":569,"extension":570,"links":571,"meta":572,"navigation":573,"path":125,"seo":574,"stem":126,"__hash__":575},"docs\u002F2.ciphers\u002F21.straddling-checkerboard.md",{"type":279,"value":280,"toc":562},"minimark",[281,285,289,292,297,308,311,321,339,415,419,436,439,487,490,494,501,510,513,517,534,538,558],[282,283],"cipher-facts",{"name":284},"straddling-checkerboard",[286,287,288],"p",{},"Letters in, digits out. The common letters get one digit each and the rest get two. The message comes out shorter than Polybius makes it. And nobody can tell where one letter ends and the next begins. Unless they have the board.",[286,290,291],{},"Swedish communist Per Meurling used it in 1937, in the Spanish Civil War. Later it became the first step of the VIC cipher. That one was the pencil and paper cipher of Reino Häyhänen, a Soviet spy.",[293,294,296],"h2",{"id":295},"the-board","The board",[286,298,299,300,304,305,303],{},"Three rows under the digits 0 to 9. The top row holds eight letters and leaves two cells blank. Those two blank digits label the other two rows, ten cells each. That's 28 cells, so 26 letters plus two fillers, usually ",[301,302,303],"code",{},"."," and ",[301,306,307],{},"\u002F",[286,309,310],{},"The default is the board from the English Wikipedia page, with 2 and 6 blank:",[312,313,319],"pre",{"className":314,"code":316,"language":317,"meta":318},[315],"language-text","    0 1 2 3 4 5 6 7 8 9\n    E T   A O N   R I S\n2   B C D F G H J K L M\n6   P Q \u002F U V W X Y Z .\n","text","",[301,320,316],{"__ignoreMap":318},[286,322,323,326,327,330,331,334,335,338],{},[301,324,325],{},"A"," sits on the top row, so it's ",[301,328,329],{},"3",". ",[301,332,333],{},"C"," is on row 2, column 1, so it's ",[301,336,337],{},"21",". Why does the decoder never get lost? Because a 2 or a 6 always starts a pair. Every other digit is a letter on its own.",[312,340,344],{"className":341,"code":342,"language":343,"meta":318,"style":318},"language-ts shiki shiki-themes ciphers ciphers ciphers","const board = create(\"straddling-checkerboard\");\nboard.encode(\"ATTACK AT DAWN\").text; \u002F\u002F \"3113212731223655\"\nboard.decode(\"3113212731223655\").text; \u002F\u002F \"ATTACKATDAWN\"\n","ts",[301,345,346,376,397],{"__ignoreMap":318},[347,348,351,355,359,362,366,369,373],"span",{"class":349,"line":350},"line",1,[347,352,354],{"class":353},"skH_V","const",[347,356,358],{"class":357},"s38Sx"," board ",[347,360,361],{"class":353},"=",[347,363,365],{"class":364},"sK71F"," create",[347,367,368],{"class":357},"(",[347,370,372],{"class":371},"shU9J","\"straddling-checkerboard\"",[347,374,375],{"class":357},");\n",[347,377,379,382,385,387,390,393],{"class":349,"line":378},2,[347,380,381],{"class":357},"board.",[347,383,384],{"class":364},"encode",[347,386,368],{"class":357},[347,388,389],{"class":371},"\"ATTACK AT DAWN\"",[347,391,392],{"class":357},").text; ",[347,394,396],{"class":395},"scIB-","\u002F\u002F \"3113212731223655\"\n",[347,398,400,402,405,407,410,412],{"class":349,"line":399},3,[347,401,381],{"class":357},[347,403,404],{"class":364},"decode",[347,406,368],{"class":357},[347,408,409],{"class":371},"\"3113212731223655\"",[347,411,392],{"class":357},[347,413,414],{"class":395},"\u002F\u002F \"ATTACKATDAWN\"\n",[293,416,418],{"id":417},"your-own-board","Your own board",[286,420,421,424,425,428,429,304,432,435],{},[301,422,423],{},"key"," is the board itself, all 28 cells row by row. Every letter A to Z goes in exactly once. The other two cells can be anything else, even the same character twice. ",[301,426,427],{},"blanks"," names the two blank digits in the order of their rows, so ",[301,430,431],{},"14",[301,433,434],{},"41"," are different boards.",[286,437,438],{},"The GSMG.IO puzzle has one. Its hint reads \"A fubcd-king & oracle-queen, thingky mvps, on a sad board\". Squash out the repeated letters, add the rest of the alphabet, and that's the board. Pretty, right?",[312,440,442],{"className":341,"code":441,"language":343,"meta":318,"style":318},"const gsmg = { key: \"FUBCDORA.LETHINGKYMVPS\u002FJQZXW\", blanks: \"14\" };\nboard.decode(\"15165943121972409169171213758951813141543\", gsmg).text;\n\u002F\u002F \"INCASEYOUMANAGETOCRACKTHIS\"\n",[301,443,444,468,482],{"__ignoreMap":318},[347,445,446,448,451,453,456,459,462,465],{"class":349,"line":350},[347,447,354],{"class":353},[347,449,450],{"class":357}," gsmg ",[347,452,361],{"class":353},[347,454,455],{"class":357}," { key: ",[347,457,458],{"class":371},"\"FUBCDORA.LETHINGKYMVPS\u002FJQZXW\"",[347,460,461],{"class":357},", blanks: ",[347,463,464],{"class":371},"\"14\"",[347,466,467],{"class":357}," };\n",[347,469,470,472,474,476,479],{"class":349,"line":378},[347,471,381],{"class":357},[347,473,404],{"class":364},[347,475,368],{"class":357},[347,477,478],{"class":371},"\"15165943121972409169171213758951813141543\"",[347,480,481],{"class":357},", gsmg).text;\n",[347,483,484],{"class":349,"line":399},[347,485,486],{"class":395},"\u002F\u002F \"INCASEYOUMANAGETOCRACKTHIS\"\n",[286,488,489],{},"That's the first 41 digits of 149. The rest finish the sentence.",[293,491,493],{"id":492},"what-it-skips","What it skips",[286,495,496,497,500],{},"Encoding turns the text uppercase and drops whatever isn't on the board. Spaces, commas and digits all go. Decoding reads digits only, so ",[301,498,499],{},"31 13 21 27"," is fine.",[286,502,503,504,506,507,509],{},"In the field ",[301,505,307],{}," was a numeral escape, a digit spelled out after it. Here it's just a cell. It decodes to ",[301,508,307],{}," and nothing reads the digits after it as numbers. Digits in the plaintext are gone before they could be escaped.",[286,511,512],{},"The VIC cipher didn't stop here either. It ran two transpositions over the digits. That part is yours. Alone, the board falls to the same frequency count as any other substitution.",[293,514,516],{"id":515},"checked-against","Checked against",[286,518,519,520,523,524,527,528,530,531,533],{},"The Wikipedia example, both ways. Its second table too, where ",[301,521,522],{},"3565257935743007"," reads back as ",[301,525,526],{},"ANWHRSANROAEER",". The GSMG.IO phase 3.2.2 digits give the sentence from the puzzle's public writeup. With ",[301,529,307],{}," as the filler, and with a second ",[301,532,303],{}," too.",[293,535,537],{"id":536},"errors","Errors",[286,539,540,541,544,545,547,548,550,551,553,554,557],{},"A board that isn't 28 cells, or misses a letter, or has one twice, is an ",[301,542,543],{},"InvalidOptionError"," on ",[301,546,423],{},". So is a ",[301,549,427],{}," that isn't two different digits. On ",[301,552,404],{},", text with no digits at all is a ",[301,555,556],{},"CipherError",". So is a code that ends on a blank digit, half a pair.",[559,560,561],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":318,"searchDepth":378,"depth":378,"links":563},[564,565,566,567,568],{"id":295,"depth":378,"text":296},{"id":417,"depth":378,"text":418},{"id":492,"depth":378,"text":493},{"id":515,"depth":378,"text":516},{"id":536,"depth":378,"text":537},"Letters to digits on a board of 28 cells. Eight letters get one digit and the rest get two. The first step of the VIC cipher and of a few puzzles.","md",null,{},true,{"title":124,"description":569},"b5AfRKd0ZhjzpLm12ocp_dMVLBcPw74s82mRbHiaGj8",[577,579],{"title":120,"path":121,"stem":122,"description":578,"children":-1},"Polybius coordinates written in two rows, read across by period, turned back into letters. Fractionation and transposition in one.",{"title":128,"path":129,"stem":130,"description":580,"children":-1},"Write the text in a zigzag over N rails, read the rails one after another. A transposition, so the letters never change.",1791184042969]