[{"data":1,"prerenderedAt":479},["ShallowReactive",2],{"navigation_docs":3,"-ciphers-nihilist":288,"-ciphers-nihilist-surround":474},[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":287},"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],{"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},"Beaufort","\u002Fciphers\u002Fbeaufort","2.ciphers\u002F09.beaufort",{"title":80,"path":81,"stem":82},"Autokey","\u002Fciphers\u002Fautokey","2.ciphers\u002F10.autokey",{"title":84,"path":85,"stem":86},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F11.trithemius",{"title":88,"path":89,"stem":90},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F12.alberti",{"title":92,"path":93,"stem":94},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F13.playfair",{"title":96,"path":97,"stem":98},"Hill","\u002Fciphers\u002Fhill","2.ciphers\u002F14.hill",{"title":100,"path":101,"stem":102},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F15.polybius",{"title":104,"path":105,"stem":106},"Nihilist","\u002Fciphers\u002Fnihilist","2.ciphers\u002F16.nihilist",{"title":108,"path":109,"stem":110},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F17.morse",{"title":112,"path":113,"stem":114},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F18.bacon",{"title":116,"path":117,"stem":118},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F19.tap-code",{"title":120,"path":121,"stem":122},"A1Z26","\u002Fciphers\u002Fa1z26","2.ciphers\u002F20.a1z26",{"title":124,"path":125,"stem":126},"Book cipher","\u002Fciphers\u002Fbook","2.ciphers\u002F21.book",{"title":128,"path":129,"stem":130},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F22.adfgvx",{"title":132,"path":133,"stem":134},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F23.bifid",{"title":136,"path":137,"stem":138},"Straddling checkerboard","\u002Fciphers\u002Fstraddling-checkerboard","2.ciphers\u002F24.straddling-checkerboard",{"title":140,"path":141,"stem":142},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F25.rail-fence",{"title":144,"path":145,"stem":146},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F26.columnar",{"title":148,"path":149,"stem":150},"Route transposition","\u002Fciphers\u002Froute","2.ciphers\u002F27.route",{"title":152,"path":153,"stem":154},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F28.enigma",{"title":156,"path":157,"stem":158},"Block","\u002Fciphers\u002Fblock","2.ciphers\u002F29.block",{"title":160,"path":161,"stem":162},"AES (ECB)","\u002Fciphers\u002Faes","2.ciphers\u002F30.aes",{"title":164,"path":165,"stem":166},"AES (CBC)","\u002Fciphers\u002Faes-cbc","2.ciphers\u002F31.aes-cbc",{"title":168,"path":169,"stem":170},"AES (CFB)","\u002Fciphers\u002Faes-cfb","2.ciphers\u002F32.aes-cfb",{"title":172,"path":173,"stem":174},"AES (OFB)","\u002Fciphers\u002Faes-ofb","2.ciphers\u002F33.aes-ofb",{"title":176,"path":177,"stem":178},"AES (CTR)","\u002Fciphers\u002Faes-ctr","2.ciphers\u002F34.aes-ctr",{"title":180,"path":181,"stem":182},"AES (CCM)","\u002Fciphers\u002Faes-ccm","2.ciphers\u002F35.aes-ccm",{"title":184,"path":185,"stem":186},"AES (OCB)","\u002Fciphers\u002Faes-ocb","2.ciphers\u002F36.aes-ocb",{"title":188,"path":189,"stem":190},"AES (LRW)","\u002Fciphers\u002Faes-lrw","2.ciphers\u002F37.aes-lrw",{"title":192,"path":193,"stem":194},"AES (XTS)","\u002Fciphers\u002Faes-xts","2.ciphers\u002F38.aes-xts",{"title":196,"path":197,"stem":198},"AES (CBC-MAC)","\u002Fciphers\u002Faes-cbc-mac","2.ciphers\u002F39.aes-cbc-mac",{"title":200,"path":201,"stem":202},"AES (passphrase)","\u002Fciphers\u002Faes-passphrase","2.ciphers\u002F40.aes-passphrase",{"title":204,"path":205,"stem":206},"Rijndael (ECB)","\u002Fciphers\u002Frijndael","2.ciphers\u002F41.rijndael",{"title":208,"path":209,"stem":210},"DES (ECB)","\u002Fciphers\u002Fdes","2.ciphers\u002F42.des",{"title":212,"path":213,"stem":214},"DESX (ECB)","\u002Fciphers\u002Fdesx","2.ciphers\u002F43.desx",{"title":216,"path":217,"stem":218},"Triple DES (ECB)","\u002Fciphers\u002Ftriple-des","2.ciphers\u002F44.triple-des",{"title":220,"path":221,"stem":222},"Triple DES (CBC)","\u002Fciphers\u002Ftriple-des-cbc","2.ciphers\u002F45.triple-des-cbc",{"title":224,"path":225,"stem":226},"Blowfish (ECB)","\u002Fciphers\u002Fblowfish","2.ciphers\u002F46.blowfish",{"title":228,"path":229,"stem":230},"IDEA (ECB)","\u002Fciphers\u002Fidea","2.ciphers\u002F47.idea",{"title":232,"path":233,"stem":234},"Lucifer (ECB)","\u002Fciphers\u002Flucifer","2.ciphers\u002F48.lucifer",{"title":236,"path":237,"stem":238},"MARS (ECB)","\u002Fciphers\u002Fmars","2.ciphers\u002F49.mars",{"title":240,"path":241,"stem":242},"Serpent (ECB)","\u002Fciphers\u002Fserpent","2.ciphers\u002F50.serpent",{"title":244,"path":245,"stem":246},"CAST5 (ECB)","\u002Fciphers\u002Fcast5","2.ciphers\u002F51.cast5",{"title":248,"path":249,"stem":250},"OpenPGP (passphrase)","\u002Fciphers\u002Fopenpgp","2.ciphers\u002F52.openpgp",{"title":252,"path":253,"stem":254},"Stream","\u002Fciphers\u002Fstream","2.ciphers\u002F53.stream",{"title":256,"path":257,"stem":258},"Rabbit","\u002Fciphers\u002Frabbit","2.ciphers\u002F54.rabbit",{"title":260,"path":261,"stem":262},"RC4","\u002Fciphers\u002Frc4","2.ciphers\u002F55.rc4",{"title":264,"path":265,"stem":266},"XOR","\u002Fciphers\u002Fxor","2.ciphers\u002F56.xor",{"title":268,"path":269,"stem":270},"Salsa20","\u002Fciphers\u002Fsalsa20","2.ciphers\u002F57.salsa20",{"title":272,"path":273,"stem":274},"XSalsa20","\u002Fciphers\u002Fxsalsa20","2.ciphers\u002F58.xsalsa20",{"title":276,"path":277,"stem":278},"ChaCha20","\u002Fciphers\u002Fchacha20","2.ciphers\u002F59.chacha20",{"title":280,"path":281,"stem":282},"XChaCha20","\u002Fciphers\u002Fxchacha20","2.ciphers\u002F60.xchacha20",{"title":284,"path":285,"stem":286},"ChaCha20-Poly1305","\u002Fciphers\u002Fchacha20-poly1305","2.ciphers\u002F61.chacha20-poly1305","i-lucide-library",{"id":289,"title":104,"body":290,"description":467,"extension":468,"links":469,"meta":470,"navigation":471,"path":105,"seo":472,"stem":106,"__hash__":473},"docs\u002F2.ciphers\u002F16.nihilist.md",{"type":291,"value":292,"toc":462},"minimark",[293,297,305,310,321,428,431,435,442,446,455,458],[294,295],"cipher-facts",{"name":296},"nihilist",[298,299,300,301,304],"p",{},"Russian Nihilists used this one in the 1880s against the tsar. It's a ",[302,303,100],"a",{"href":101}," with a second keyword on top. Every letter becomes its row and column, say 23. The key letter under it becomes a number too. Add the two. That's the ciphertext. Pencil and a scrap of paper, nothing more.",[306,307,309],"h2",{"id":308},"two-keywords","Two keywords",[298,311,312,316,317,320],{},[313,314,315],"code",{},"square"," builds the 5×5 grid. Keyword first, then the rest of A-Z, I and J sharing a cell. Leave it out and you get the plain square. ",[313,318,319],{},"key"," is the additive. Its letters become numbers through the same square and repeat for as long as the text goes. Wikipedia's example uses both:",[322,323,328],"pre",{"className":324,"code":325,"language":326,"meta":327,"style":327},"language-ts shiki shiki-themes ciphers ciphers ciphers","const nihilist = create(\"nihilist\");\nconst keys = { key: \"RUSSIAN\", square: \"ZEBRAS\" };\nnihilist.encode(\"DYNAMITE WINTER PALACE\", keys).text;\n\u002F\u002F \"37 106 62 36 67 47 86 26 104 53 62 77 27 55 57 66 55 36 54 27\"\nnihilist.decode(\"37 106 62 36 67\", keys).text; \u002F\u002F \"DYNAM\"\n","ts","",[313,329,330,360,385,402,409],{"__ignoreMap":327},[331,332,335,339,343,346,350,353,357],"span",{"class":333,"line":334},"line",1,[331,336,338],{"class":337},"skH_V","const",[331,340,342],{"class":341},"s38Sx"," nihilist ",[331,344,345],{"class":337},"=",[331,347,349],{"class":348},"sK71F"," create",[331,351,352],{"class":341},"(",[331,354,356],{"class":355},"shU9J","\"nihilist\"",[331,358,359],{"class":341},");\n",[331,361,363,365,368,370,373,376,379,382],{"class":333,"line":362},2,[331,364,338],{"class":337},[331,366,367],{"class":341}," keys ",[331,369,345],{"class":337},[331,371,372],{"class":341}," { key: ",[331,374,375],{"class":355},"\"RUSSIAN\"",[331,377,378],{"class":341},", square: ",[331,380,381],{"class":355},"\"ZEBRAS\"",[331,383,384],{"class":341}," };\n",[331,386,388,391,394,396,399],{"class":333,"line":387},3,[331,389,390],{"class":341},"nihilist.",[331,392,393],{"class":348},"encode",[331,395,352],{"class":341},[331,397,398],{"class":355},"\"DYNAMITE WINTER PALACE\"",[331,400,401],{"class":341},", keys).text;\n",[331,403,405],{"class":333,"line":404},4,[331,406,408],{"class":407},"scIB-","\u002F\u002F \"37 106 62 36 67 47 86 26 104 53 62 77 27 55 57 66 55 36 54 27\"\n",[331,410,412,414,417,419,422,425],{"class":333,"line":411},5,[331,413,390],{"class":341},[331,415,416],{"class":348},"decode",[331,418,352],{"class":341},[331,420,421],{"class":355},"\"37 106 62 36 67\"",[331,423,424],{"class":341},", keys).text; ",[331,426,427],{"class":407},"\u002F\u002F \"DYNAM\"\n",[298,429,430],{},"Yes, 106. Y sits at 55, U at 51, and nobody wraps the sum. Why would they? Pencil arithmetic doesn't do modulo.",[306,432,434],{"id":433},"numbers-back-to-letters","Numbers back to letters",[298,436,437,438,441],{},"Encoding drops everything that isn't a letter and folds J into I. Out come numbers with single spaces. Decoding reads every run of digits, so spaces, commas and line breaks all work. Each number minus its key number has to land on a cell, 11 to 55. If it doesn't, you get a ",[313,439,440],{},"CipherError"," that names the number. Usually that's the wrong key. Or someone wrapped at 100 after all.",[306,443,445],{"id":444},"spotting-one","Spotting one",[298,447,448,449,454],{},"So what gives a Nihilist away? Every number sits between 22 and 110, and none ends in 1. Two digits from 1 to 5 never add up to 1 or 11. ",[302,450,451],{"href":17},[313,452,453],{},"guess"," names Nihilist on that, but never above medium. Decimal character codes can pass the same test.",[298,456,457],{},"The 106 is bad news for the sender. Anything over 100 means both letters came from the fifth row. Underneath it's a Vigenère in numbers, and it falls to the same column attack. Wikipedia calls it \"little more than a numerical version of the Vigenère cipher\". Fair.",[459,460,461],"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":327,"searchDepth":362,"depth":362,"links":463},[464,465,466],{"id":308,"depth":362,"text":309},{"id":433,"depth":362,"text":434},{"id":444,"depth":362,"text":445},"Polybius numbers plus a repeating keyword, added the plain way. A 106 in the ciphertext says more than it should.","md",null,{},true,{"title":104,"description":467},"6V-ozN8zfXAwVWfDnXc7KYu4SZaXclZPVVvrEn-_0cM",[475,477],{"title":100,"path":101,"stem":102,"description":476,"children":-1},"Each letter becomes a row digit and a column digit in a 5×5 grid, I and J sharing a cell. An optional keyword reorders the grid.",{"title":108,"path":109,"stem":110,"description":478,"children":-1},"Letters and digits to dots and dashes. A space between letters, a slash between words.",1791419055047]