[{"data":1,"prerenderedAt":585},["ShallowReactive",2],{"navigation_docs":3,"-ciphers-chaocipher":332,"-ciphers-chaocipher-surround":580},[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":331},"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,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"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},"Substitution","\u002Fciphers\u002Fsubstitution","2.ciphers\u002F07.substitution",{"title":72,"path":73,"stem":74},"Vigenère","\u002Fciphers\u002Fvigenere","2.ciphers\u002F08.vigenere",{"title":76,"path":77,"stem":78},"Gronsfeld","\u002Fciphers\u002Fgronsfeld","2.ciphers\u002F09.gronsfeld",{"title":80,"path":81,"stem":82},"Beaufort","\u002Fciphers\u002Fbeaufort","2.ciphers\u002F10.beaufort",{"title":84,"path":85,"stem":86},"Porta","\u002Fciphers\u002Fporta","2.ciphers\u002F11.porta",{"title":88,"path":89,"stem":90},"Autokey","\u002Fciphers\u002Fautokey","2.ciphers\u002F12.autokey",{"title":92,"path":93,"stem":94},"Running key","\u002Fciphers\u002Frunning-key","2.ciphers\u002F13.running-key",{"title":96,"path":97,"stem":98},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F14.trithemius",{"title":100,"path":101,"stem":102},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F15.alberti",{"title":104,"path":105,"stem":106},"Quagmire I","\u002Fciphers\u002Fquagmire-1","2.ciphers\u002F16.quagmire-1",{"title":108,"path":109,"stem":110},"Quagmire II","\u002Fciphers\u002Fquagmire-2","2.ciphers\u002F17.quagmire-2",{"title":112,"path":113,"stem":114},"Quagmire III","\u002Fciphers\u002Fquagmire-3","2.ciphers\u002F18.quagmire-3",{"title":116,"path":117,"stem":118},"Quagmire IV","\u002Fciphers\u002Fquagmire-4","2.ciphers\u002F19.quagmire-4",{"title":120,"path":121,"stem":122},"Chaocipher","\u002Fciphers\u002Fchaocipher","2.ciphers\u002F20.chaocipher",{"title":124,"path":125,"stem":126},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F21.playfair",{"title":128,"path":129,"stem":130},"Four-square","\u002Fciphers\u002Ffour-square","2.ciphers\u002F22.four-square",{"title":132,"path":133,"stem":134},"Two-square","\u002Fciphers\u002Ftwo-square","2.ciphers\u002F23.two-square",{"title":136,"path":137,"stem":138},"Hill","\u002Fciphers\u002Fhill","2.ciphers\u002F24.hill",{"title":140,"path":141,"stem":142},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F25.polybius",{"title":144,"path":145,"stem":146},"Nihilist","\u002Fciphers\u002Fnihilist","2.ciphers\u002F26.nihilist",{"title":148,"path":149,"stem":150},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F27.morse",{"title":152,"path":153,"stem":154},"Fractionated Morse","\u002Fciphers\u002Ffractionated-morse","2.ciphers\u002F28.fractionated-morse",{"title":156,"path":157,"stem":158},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F29.bacon",{"title":160,"path":161,"stem":162},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F30.tap-code",{"title":164,"path":165,"stem":166},"A1Z26","\u002Fciphers\u002Fa1z26","2.ciphers\u002F31.a1z26",{"title":168,"path":169,"stem":170},"Book cipher","\u002Fciphers\u002Fbook","2.ciphers\u002F32.book",{"title":172,"path":173,"stem":174},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F33.adfgvx",{"title":176,"path":177,"stem":178},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F34.bifid",{"title":180,"path":181,"stem":182},"Straddling checkerboard","\u002Fciphers\u002Fstraddling-checkerboard","2.ciphers\u002F35.straddling-checkerboard",{"title":184,"path":185,"stem":186},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F36.rail-fence",{"title":188,"path":189,"stem":190},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F37.columnar",{"title":192,"path":193,"stem":194},"Route transposition","\u002Fciphers\u002Froute","2.ciphers\u002F38.route",{"title":196,"path":197,"stem":198},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F39.enigma",{"title":200,"path":201,"stem":202},"Block","\u002Fciphers\u002Fblock","2.ciphers\u002F40.block",{"title":204,"path":205,"stem":206},"AES (ECB)","\u002Fciphers\u002Faes","2.ciphers\u002F41.aes",{"title":208,"path":209,"stem":210},"AES (CBC)","\u002Fciphers\u002Faes-cbc","2.ciphers\u002F42.aes-cbc",{"title":212,"path":213,"stem":214},"AES (CFB)","\u002Fciphers\u002Faes-cfb","2.ciphers\u002F43.aes-cfb",{"title":216,"path":217,"stem":218},"AES (OFB)","\u002Fciphers\u002Faes-ofb","2.ciphers\u002F44.aes-ofb",{"title":220,"path":221,"stem":222},"AES (CTR)","\u002Fciphers\u002Faes-ctr","2.ciphers\u002F45.aes-ctr",{"title":224,"path":225,"stem":226},"AES (CCM)","\u002Fciphers\u002Faes-ccm","2.ciphers\u002F46.aes-ccm",{"title":228,"path":229,"stem":230},"AES (OCB)","\u002Fciphers\u002Faes-ocb","2.ciphers\u002F47.aes-ocb",{"title":232,"path":233,"stem":234},"AES (LRW)","\u002Fciphers\u002Faes-lrw","2.ciphers\u002F48.aes-lrw",{"title":236,"path":237,"stem":238},"AES (XTS)","\u002Fciphers\u002Faes-xts","2.ciphers\u002F49.aes-xts",{"title":240,"path":241,"stem":242},"AES (CBC-MAC)","\u002Fciphers\u002Faes-cbc-mac","2.ciphers\u002F50.aes-cbc-mac",{"title":244,"path":245,"stem":246},"AES (passphrase)","\u002Fciphers\u002Faes-passphrase","2.ciphers\u002F51.aes-passphrase",{"title":248,"path":249,"stem":250},"Rijndael (ECB)","\u002Fciphers\u002Frijndael","2.ciphers\u002F52.rijndael",{"title":252,"path":253,"stem":254},"DES (ECB)","\u002Fciphers\u002Fdes","2.ciphers\u002F53.des",{"title":256,"path":257,"stem":258},"DESX (ECB)","\u002Fciphers\u002Fdesx","2.ciphers\u002F54.desx",{"title":260,"path":261,"stem":262},"Triple DES (ECB)","\u002Fciphers\u002Ftriple-des","2.ciphers\u002F55.triple-des",{"title":264,"path":265,"stem":266},"Triple DES (CBC)","\u002Fciphers\u002Ftriple-des-cbc","2.ciphers\u002F56.triple-des-cbc",{"title":268,"path":269,"stem":270},"Blowfish (ECB)","\u002Fciphers\u002Fblowfish","2.ciphers\u002F57.blowfish",{"title":272,"path":273,"stem":274},"IDEA (ECB)","\u002Fciphers\u002Fidea","2.ciphers\u002F58.idea",{"title":276,"path":277,"stem":278},"Lucifer (ECB)","\u002Fciphers\u002Flucifer","2.ciphers\u002F59.lucifer",{"title":280,"path":281,"stem":282},"MARS (ECB)","\u002Fciphers\u002Fmars","2.ciphers\u002F60.mars",{"title":284,"path":285,"stem":286},"Serpent (ECB)","\u002Fciphers\u002Fserpent","2.ciphers\u002F61.serpent",{"title":288,"path":289,"stem":290},"CAST5 (ECB)","\u002Fciphers\u002Fcast5","2.ciphers\u002F62.cast5",{"title":292,"path":293,"stem":294},"OpenPGP (passphrase)","\u002Fciphers\u002Fopenpgp","2.ciphers\u002F63.openpgp",{"title":296,"path":297,"stem":298},"Stream","\u002Fciphers\u002Fstream","2.ciphers\u002F64.stream",{"title":300,"path":301,"stem":302},"Rabbit","\u002Fciphers\u002Frabbit","2.ciphers\u002F65.rabbit",{"title":304,"path":305,"stem":306},"RC4","\u002Fciphers\u002Frc4","2.ciphers\u002F66.rc4",{"title":308,"path":309,"stem":310},"XOR","\u002Fciphers\u002Fxor","2.ciphers\u002F67.xor",{"title":312,"path":313,"stem":314},"Salsa20","\u002Fciphers\u002Fsalsa20","2.ciphers\u002F68.salsa20",{"title":316,"path":317,"stem":318},"XSalsa20","\u002Fciphers\u002Fxsalsa20","2.ciphers\u002F69.xsalsa20",{"title":320,"path":321,"stem":322},"ChaCha20","\u002Fciphers\u002Fchacha20","2.ciphers\u002F70.chacha20",{"title":324,"path":325,"stem":326},"XChaCha20","\u002Fciphers\u002Fxchacha20","2.ciphers\u002F71.xchacha20",{"title":328,"path":329,"stem":330},"ChaCha20-Poly1305","\u002Fciphers\u002Fchacha20-poly1305","2.ciphers\u002F72.chacha20-poly1305","i-lucide-library",{"id":333,"title":120,"body":334,"description":573,"extension":574,"links":575,"meta":576,"navigation":577,"path":121,"seo":578,"stem":122,"__hash__":579},"docs\u002F2.ciphers\u002F20.chaocipher.md",{"type":335,"value":336,"toc":567},"minimark",[337,341,350,353,457,468,473,491,495,498,501,504,507,511,526,537,540,544,563],[338,339],"cipher-facts",{"name":340},"chaocipher",[342,343,344,345,349],"p",{},"John F. Byrne invented it in 1918 and tried to sell it to the Signal Corps and the Navy. Nobody bought it. Nobody broke it either. He printed challenge messages in his autobiography, ",[346,347,348],"em",{},"Silent Years",", and kept the method to himself. It came out only in 2010, when his family gave the papers to the National Cryptologic Museum and Moshe Rubin wrote it all down.",[342,351,352],{},"The reveal is almost funny. Two disks of 26 letters and a small shuffle after every letter. That's it.",[354,355,360],"pre",{"className":356,"code":357,"language":358,"meta":359,"style":359},"language-ts shiki shiki-themes ciphers ciphers ciphers","const chaocipher = create(\"chaocipher\");\nconst disks = { key: \"HXUCZVAMDSLKPEFJRIGTWOBNYQ\", secondKey: \"PTLNBQDEOYSFAVZKGJRIHWXUMC\" };\nchaocipher.encode(\"Well done is better than well said\", disks).text; \u002F\u002F \"Oahq hcny nx tszjrr hjby hqks oujy\"\nchaocipher.decode(\"OAHQHCNYNXTSZJRRHJBYHQKSOUJY\", disks).text; \u002F\u002F \"WELLDONEISBETTERTHANWELLSAID\"\n","ts","",[361,362,363,393,418,439],"code",{"__ignoreMap":359},[364,365,368,372,376,379,383,386,390],"span",{"class":366,"line":367},"line",1,[364,369,371],{"class":370},"skH_V","const",[364,373,375],{"class":374},"s38Sx"," chaocipher ",[364,377,378],{"class":370},"=",[364,380,382],{"class":381},"sK71F"," create",[364,384,385],{"class":374},"(",[364,387,389],{"class":388},"shU9J","\"chaocipher\"",[364,391,392],{"class":374},");\n",[364,394,396,398,401,403,406,409,412,415],{"class":366,"line":395},2,[364,397,371],{"class":370},[364,399,400],{"class":374}," disks ",[364,402,378],{"class":370},[364,404,405],{"class":374}," { key: ",[364,407,408],{"class":388},"\"HXUCZVAMDSLKPEFJRIGTWOBNYQ\"",[364,410,411],{"class":374},", secondKey: ",[364,413,414],{"class":388},"\"PTLNBQDEOYSFAVZKGJRIHWXUMC\"",[364,416,417],{"class":374}," };\n",[364,419,421,424,427,429,432,435],{"class":366,"line":420},3,[364,422,423],{"class":374},"chaocipher.",[364,425,426],{"class":381},"encode",[364,428,385],{"class":374},[364,430,431],{"class":388},"\"Well done is better than well said\"",[364,433,434],{"class":374},", disks).text; ",[364,436,438],{"class":437},"scIB-","\u002F\u002F \"Oahq hcny nx tszjrr hjby hqks oujy\"\n",[364,440,442,444,447,449,452,454],{"class":366,"line":441},4,[364,443,423],{"class":374},[364,445,446],{"class":381},"decode",[364,448,385],{"class":374},[364,450,451],{"class":388},"\"OAHQHCNYNXTSZJRRHJBYHQKSOUJY\"",[364,453,434],{"class":374},[364,455,456],{"class":437},"\u002F\u002F \"WELLDONEISBETTERTHANWELLSAID\"\n",[342,458,459,460,467],{},"That's the exercise from Rubin's ",[461,462,466],"a",{"href":463,"rel":464},"http:\u002F\u002Fwww.chaocipher.com\u002FActualChaocipher\u002FChaocipher-Revealed-Algorithm.pdf",[465],"nofollow","Chaocipher Revealed: The Algorithm",", with the alphabets from his figure 2. Want to check it by hand? He prints every alphabet the 28 letters go through. Bring coffee.",[469,470,472],"h2",{"id":471},"which-alphabet-is-which","Which alphabet is which?",[342,474,475,478,479,482,483,486,487,490],{},[361,476,477],{},"key"," is the left disk, the ciphertext one. ",[361,480,481],{},"secondKey"," is the right disk, the plaintext one. Each takes 26 letters as they stand, or a keyword the rest of A-Z follows, so ",[361,484,485],{},"CHAOS"," gives ",[361,488,489],{},"CHAOSBDEFG…",". Swap them and you get a different cipher, not an error. Check which disk a puzzle calls left.",[469,492,494],{"id":493},"what-happens-after-each-letter","What happens after each letter?",[342,496,497],{},"Find the plaintext letter on the right disk. The letter above it on the left disk is the ciphertext. Then both disks move.",[342,499,500],{},"The left disk turns until the ciphertext letter sits at the zenith, place 1. The letter after it drops out and goes to the nadir, place 14. Everything in between slides up one.",[342,502,503],{},"The right disk turns until the plaintext letter is at the zenith, then one more. Now the third letter drops to the nadir.",[342,505,506],{},"Decoding finds the ciphertext letter on the left disk instead. The shuffle is exactly the same. Nice touch: there's one permutation to get right, not two.",[469,508,510],{"id":509},"why-is-it-so-hard-to-break","Why is it so hard to break?",[342,512,513,514,519,520,525],{},"Every letter gets a fresh alphabet, and which one depends on the text so far. No period, no repeating key. ",[461,515,516],{"href":17},[361,517,518],{},"guess"," sees an index of coincidence as flat as random letters, around 0.037, and lists it with the polyalphabetic ciphers. ",[461,521,522],{"href":17},[361,523,524],{},"recover"," doesn't take it.",[342,527,528,529,532,533,536],{},"The flip side hurts. Lose one letter and the disks fall out of step for good. Drop the first ",[361,530,531],{},"O"," from the example above and the rest decodes as ",[361,534,535],{},"DTTQELDISTJPCRLPIQISEPRDAQB",". Copy puzzle ciphertext carefully.",[342,538,539],{},"One thing does repeat. Turn both disks by the same number of places and nothing changes, since only their alignment matters. That's why the keyspace reads 26! × 25! and not 26!².",[469,541,543],{"id":542},"the-rest-of-the-text","The rest of the text",[342,545,546,547,550,551,554,555,558,559,562],{},"Only ASCII letters turn the disks. Spaces and punctuation pass through. Lowercase stays lowercase unless ",[361,548,549],{},"preserveCase"," is false, and ",[361,552,553],{},"stripNonAlpha"," drops everything outside A to Z first. The alphabets ignore case and anything that isn't a letter. A missing one is a ",[361,556,557],{},"MissingOptionError",", one without letters an ",[361,560,561],{},"InvalidOptionError",".",[564,565,566],"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":359,"searchDepth":395,"depth":395,"links":568},[569,570,571,572],{"id":471,"depth":395,"text":472},{"id":493,"depth":395,"text":494},{"id":509,"depth":395,"text":510},{"id":542,"depth":395,"text":543},"Byrne's 1918 cipher. Two alphabets that shuffle themselves after every letter. Secret for 92 years. Now it fits on one page.","md",null,{},true,{"title":120,"description":573},"msT1ScKKbO4abHeYWd_KYbNlkxEJOs2oOfUBfnhnGsc",[581,583],{"title":116,"path":117,"stem":118,"description":582,"children":-1},"Three keywords. One for the plain alphabet, one for the cipher alphabet and an indicator to slide one along the other.",{"title":124,"path":125,"stem":126,"description":584,"children":-1},"Letter pairs through a keyed 5×5 table. J folds into I, doubled pairs are split with X, odd length is padded with X.",1791487534469]