[{"data":1,"prerenderedAt":1179},["ShallowReactive",2],{"navigation_docs":3,"-guide":116,"-guide-surround":1176},[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-solar-book-2-linear",{"title":37,"path":38,"stem":39,"children":40,"icon":115},"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],{"title":42,"path":38,"stem":39},"Overview",{"title":44,"path":45,"stem":46},"Caesar","\u002Fciphers\u002Fcaesar","2.ciphers\u002F01.caesar",{"title":48,"path":49,"stem":50},"ROT-13","\u002Fciphers\u002Frot13","2.ciphers\u002F02.rot13",{"title":52,"path":53,"stem":54},"ROT-47","\u002Fciphers\u002Frot47","2.ciphers\u002F03.rot47",{"title":56,"path":57,"stem":58},"Atbash","\u002Fciphers\u002Fatbash","2.ciphers\u002F04.atbash",{"title":60,"path":61,"stem":62},"Affine","\u002Fciphers\u002Faffine","2.ciphers\u002F05.affine",{"title":64,"path":65,"stem":66},"Vigenère","\u002Fciphers\u002Fvigenere","2.ciphers\u002F06.vigenere",{"title":68,"path":69,"stem":70},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F07.trithemius",{"title":72,"path":73,"stem":74},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F08.alberti",{"title":76,"path":77,"stem":78},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F09.playfair",{"title":80,"path":81,"stem":82},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F10.polybius",{"title":84,"path":85,"stem":86},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F11.morse",{"title":88,"path":89,"stem":90},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F12.bacon",{"title":92,"path":93,"stem":94},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F13.tap-code",{"title":96,"path":97,"stem":98},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F14.adfgvx",{"title":100,"path":101,"stem":102},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F15.bifid",{"title":104,"path":105,"stem":106},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F16.rail-fence",{"title":108,"path":109,"stem":110},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F17.columnar",{"title":112,"path":113,"stem":114},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F18.enigma","i-solar-library-linear",{"id":117,"title":10,"body":118,"description":1170,"extension":1171,"links":1172,"meta":1173,"navigation":233,"path":6,"seo":1174,"stem":7,"__hash__":1175},"docs\u002F1.guide\u002F01.index.md",{"type":119,"value":120,"toc":1161},"minimark",[121,129,136,141,145,153,157,182,186,412,427,431,440,561,610,614,922,926,1092,1111,1115,1157],[122,123,124,128],"warning",{},[125,126,127],"strong",{},"Pre-1.0."," API and tool list can still move. Pin exact versions if you build on it now.",[130,131,132,135],"caution",{},[125,133,134],{},"Classical ciphers protect nothing."," Lessons, riddles, CTFs - yes. Secrets - no. Anyone with a laptop breaks every cipher on this site in seconds. Use a real primitive for anything that matters.",[137,138,140],"h2",{"id":139},"why-this-exists","Why this exists",[142,143,144],"p",{},"A puzzle says \"the key is LEMON\" and I want the plaintext, not a lecture. An agent gets a ROT-47 string in a challenge and needs to flip it without leaving the process. Each cipher is small, but every one of them has conventions that decide whether your answer matches the author's: does Playfair fold J into I, does Bacon use 24 or 26 letters, which rotors is \"Enigma\" even. Every online tool picks something different and rarely says what.",[142,146,147,148,152],{},"So ",[149,150,151],"code",{},"@agntn\u002Fciphers"," picks once, writes it down, and gives every cipher the same two methods. No HTTP, no keys, no telemetry. It runs in your process and that's it.",[137,154,156],{"id":155},"install","Install",[158,159,164],"pre",{"className":160,"code":161,"language":162,"meta":163,"style":163},"language-bash shiki shiki-themes github-light github-light poimandres","pnpm add @agntn\u002Fciphers\n","bash","",[149,165,166],{"__ignoreMap":163},[167,168,171,175,179],"span",{"class":169,"line":170},"line",1,[167,172,174],{"class":173},"sseY5","pnpm",[167,176,178],{"class":177},"sX7Zv"," add",[167,180,181],{"class":177}," @agntn\u002Fciphers\n",[137,183,185],{"id":184},"first-call","First call",[158,187,192],{"className":188,"code":189,"filename":190,"language":191,"meta":163,"style":163},"language-ts shiki shiki-themes github-light github-light poimandres","import { create } from \"@agntn\u002Fciphers\";\n\nconst vigenere = create(\"vigenere\");\n\nconst encoded = vigenere.encode(\"ATTACK AT DAWN\", { key: \"LEMON\" });\nconsole.log(encoded.text); \u002F\u002F LXFOPV EF RNHR\n\nconst decoded = vigenere.decode(encoded.text, { key: \"LEMON\" });\nconsole.log(decoded.text); \u002F\u002F ATTACK AT DAWN\n","vigenere.ts","ts",[149,193,194,228,235,265,270,317,345,350,389],{"__ignoreMap":163},[167,195,196,200,204,208,211,215,219,222,225],{"class":169,"line":170},[167,197,199],{"class":198},"sP0CR","import",[167,201,203],{"class":202},"sKlNE"," {",[167,205,207],{"class":206},"snHMy"," create",[167,209,210],{"class":202}," }",[167,212,214],{"class":213},"stCPd"," from",[167,216,218],{"class":217},"scVjq"," \"",[167,220,151],{"class":221},"sQ7BG",[167,223,224],{"class":217},"\"",[167,226,227],{"class":202},";\n",[167,229,231],{"class":169,"line":230},2,[167,232,234],{"emptyLinePlaceholder":233},true,"\n",[167,236,238,242,246,249,252,255,257,260,262],{"class":169,"line":237},3,[167,239,241],{"class":240},"s1TYA","const",[167,243,245],{"class":244},"saoiD"," vigenere",[167,247,248],{"class":240}," =",[167,250,207],{"class":251},"sULi6",[167,253,254],{"class":202},"(",[167,256,224],{"class":217},[167,258,259],{"class":221},"vigenere",[167,261,224],{"class":217},[167,263,264],{"class":202},");\n",[167,266,268],{"class":169,"line":267},4,[167,269,234],{"emptyLinePlaceholder":233},[167,271,273,275,278,280,283,286,289,291,293,296,298,301,304,307,309,312,314],{"class":169,"line":272},5,[167,274,241],{"class":240},[167,276,277],{"class":244}," encoded",[167,279,248],{"class":240},[167,281,245],{"class":282},"spVlQ",[167,284,285],{"class":202},".",[167,287,288],{"class":251},"encode",[167,290,254],{"class":202},[167,292,224],{"class":217},[167,294,295],{"class":221},"ATTACK AT DAWN",[167,297,224],{"class":217},[167,299,300],{"class":202},", {",[167,302,303],{"class":206}," key",[167,305,306],{"class":202},":",[167,308,218],{"class":217},[167,310,311],{"class":221},"LEMON",[167,313,224],{"class":217},[167,315,316],{"class":202}," });\n",[167,318,320,323,325,328,330,333,335,338,341],{"class":169,"line":319},6,[167,321,322],{"class":282},"console",[167,324,285],{"class":202},[167,326,327],{"class":251},"log",[167,329,254],{"class":202},[167,331,332],{"class":282},"encoded",[167,334,285],{"class":202},[167,336,337],{"class":282},"text",[167,339,340],{"class":202},"); ",[167,342,344],{"class":343},"sjhu3","\u002F\u002F LXFOPV EF RNHR\n",[167,346,348],{"class":169,"line":347},7,[167,349,234],{"emptyLinePlaceholder":233},[167,351,353,355,358,360,362,364,367,369,371,373,375,377,379,381,383,385,387],{"class":169,"line":352},8,[167,354,241],{"class":240},[167,356,357],{"class":244}," decoded",[167,359,248],{"class":240},[167,361,245],{"class":282},[167,363,285],{"class":202},[167,365,366],{"class":251},"decode",[167,368,254],{"class":202},[167,370,332],{"class":282},[167,372,285],{"class":202},[167,374,337],{"class":282},[167,376,300],{"class":202},[167,378,303],{"class":206},[167,380,306],{"class":202},[167,382,218],{"class":217},[167,384,311],{"class":221},[167,386,224],{"class":217},[167,388,316],{"class":202},[167,390,392,394,396,398,400,403,405,407,409],{"class":169,"line":391},9,[167,393,322],{"class":282},[167,395,285],{"class":202},[167,397,327],{"class":251},[167,399,254],{"class":202},[167,401,402],{"class":282},"decoded",[167,404,285],{"class":202},[167,406,337],{"class":282},[167,408,340],{"class":202},[167,410,411],{"class":343},"\u002F\u002F ATTACK AT DAWN\n",[142,413,414,415,418,419,422,423,426],{},"Importing the package registers all eighteen ciphers. ",[149,416,417],{},"create(name)"," gives you one cached instance and wants the exact registry name. ",[149,420,421],{},"resolveCipher(\"Rail Fence\")"," lowercases, turns spaces into hyphens, and then also wants an exact match. No prefixes, no fuzzy matching, a typo is an ",[149,424,425],{},"UnknownCipherError",". Guessing which cipher you meant is how you get the wrong plaintext with a straight face.",[137,428,430],{"id":429},"the-shape","The shape",[142,432,433,434,436,437,439],{},"Every ",[149,435,288],{}," and ",[149,438,366],{}," returns this:",[158,441,443],{"className":188,"code":442,"language":191,"meta":163,"style":163},"interface CipherResult {\n  text: string; \u002F\u002F the output\n  cipher: string; \u002F\u002F \"vigenere\"\n  operation: \"encode\" | \"decode\";\n  options: Record\u003Cstring, unknown>; \u002F\u002F what was actually applied, defaults included\n  normalizedInput?: string; \u002F\u002F optional, for a cipher that reshapes its input; the built-ins leave it out\n}\n",[149,444,445,457,475,489,513,541,556],{"__ignoreMap":163},[167,446,447,450,454],{"class":169,"line":170},[167,448,449],{"class":240},"interface",[167,451,453],{"class":452},"sCrqT"," CipherResult",[167,455,456],{"class":202}," {\n",[167,458,459,463,465,469,472],{"class":169,"line":230},[167,460,462],{"class":461},"s0VbO","  text",[167,464,306],{"class":240},[167,466,468],{"class":467},"s8yaW"," string",[167,470,471],{"class":202},"; ",[167,473,474],{"class":343},"\u002F\u002F the output\n",[167,476,477,480,482,484,486],{"class":169,"line":237},[167,478,479],{"class":461},"  cipher",[167,481,306],{"class":240},[167,483,468],{"class":467},[167,485,471],{"class":202},[167,487,488],{"class":343},"\u002F\u002F \"vigenere\"\n",[167,490,491,494,496,498,500,502,505,507,509,511],{"class":169,"line":267},[167,492,493],{"class":461},"  operation",[167,495,306],{"class":240},[167,497,218],{"class":217},[167,499,288],{"class":221},[167,501,224],{"class":217},[167,503,504],{"class":240}," |",[167,506,218],{"class":217},[167,508,366],{"class":221},[167,510,224],{"class":217},[167,512,227],{"class":202},[167,514,515,518,520,523,526,529,532,535,538],{"class":169,"line":272},[167,516,517],{"class":461},"  options",[167,519,306],{"class":240},[167,521,522],{"class":452}," Record",[167,524,525],{"class":202},"\u003C",[167,527,528],{"class":467},"string",[167,530,531],{"class":202},", ",[167,533,534],{"class":467},"unknown",[167,536,537],{"class":202},">; ",[167,539,540],{"class":343},"\u002F\u002F what was actually applied, defaults included\n",[167,542,543,546,549,551,553],{"class":169,"line":319},[167,544,545],{"class":461},"  normalizedInput",[167,547,548],{"class":240},"?:",[167,550,468],{"class":467},[167,552,471],{"class":202},[167,554,555],{"class":343},"\u002F\u002F optional, for a cipher that reshapes its input; the built-ins leave it out\n",[167,557,558],{"class":169,"line":347},[167,559,560],{"class":202},"}\n",[142,562,563,564,567,568,571,572,567,575,578,579,531,582,531,585,531,588,531,591,531,594,531,597,531,600,531,603,606,607,285],{},"Two options every cipher understands: ",[149,565,566],{},"preserveCase"," (default ",[149,569,570],{},"true",") keeps lowercase letters lowercase, ",[149,573,574],{},"stripNonAlpha",[149,576,577],{},"false",") drops everything that is not a letter before the cipher runs. The rest is per cipher - ",[149,580,581],{},"shift",[149,583,584],{},"key",[149,586,587],{},"rails",[149,589,590],{},"a",[149,592,593],{},"b",[149,595,596],{},"period",[149,598,599],{},"positions",[149,601,602],{},"rings",[149,604,605],{},"plugboard",". Each cipher's page lists its own, and so does ",[149,608,609],{},"create(name).info()",[137,611,613],{"id":612},"what-ships","What ships",[615,616,617,637],"table",{},[618,619,620],"thead",{},[621,622,623,627,630,633],"tr",{},[624,625,626],"th",{},"Cipher",[624,628,629],{},"Family",[624,631,632],{},"Options",[624,634,636],{"align":635},"center","Self-inverse",[638,639,640,658,672,685,699,714,727,744,764,780,797,810,823,836,851,870,887,902],"tbody",{},[621,641,642,648,650,655],{},[643,644,645],"td",{},[590,646,647],{"href":45},"caesar",[643,649,581],{},[643,651,652,654],{},[149,653,581],{}," (1 to 25, default 3)",[643,656,657],{"align":635},"✗",[621,659,660,665,667,669],{},[643,661,662],{},[590,663,664],{"href":49},"rot13",[643,666,581],{},[643,668],{},[643,670,671],{"align":635},"✓",[621,673,674,679,681,683],{},[643,675,676],{},[590,677,678],{"href":53},"rot47",[643,680,581],{},[643,682],{},[643,684,671],{"align":635},[621,686,687,692,695,697],{},[643,688,689],{},[590,690,691],{"href":57},"atbash",[643,693,694],{},"reflection",[643,696],{},[643,698,671],{"align":635},[621,700,701,705,708,712],{},[643,702,703],{},[590,704,259],{"href":65},[643,706,707],{},"polyalphabetic",[643,709,710],{},[149,711,584],{},[643,713,657],{"align":635},[621,715,716,721,723,725],{},[643,717,718],{},[590,719,720],{"href":69},"trithemius",[643,722,707],{},[643,724],{},[643,726,657],{"align":635},[621,728,729,734,736,742],{},[643,730,731],{},[590,732,733],{"href":73},"alberti",[643,735,707],{},[643,737,738,531,740],{},[149,739,584],{},[149,741,596],{},[643,743,657],{"align":635},[621,745,746,751,754,762],{},[643,747,748],{},[590,749,750],{"href":61},"affine",[643,752,753],{},"multiplicative",[643,755,756,758,759,761],{},[149,757,590],{}," (default 5), ",[149,760,593],{}," (default 8)",[643,763,657],{"align":635},[621,765,766,771,774,778],{},[643,767,768],{},[590,769,770],{"href":77},"playfair",[643,772,773],{},"digraph",[643,775,776],{},[149,777,584],{},[643,779,657],{"align":635},[621,781,782,787,790,795],{},[643,783,784],{},[590,785,786],{"href":81},"polybius",[643,788,789],{},"fractionation",[643,791,792,794],{},[149,793,584],{}," optional",[643,796,657],{"align":635},[621,798,799,804,806,808],{},[643,800,801],{},[590,802,803],{"href":85},"morse",[643,805,789],{},[643,807],{},[643,809,657],{"align":635},[621,811,812,817,819,821],{},[643,813,814],{},[590,815,816],{"href":89},"bacon",[643,818,789],{},[643,820],{},[643,822,657],{"align":635},[621,824,825,830,832,834],{},[643,826,827],{},[590,828,829],{"href":93},"tap-code",[643,831,789],{},[643,833],{},[643,835,657],{"align":635},[621,837,838,843,845,849],{},[643,839,840],{},[590,841,842],{"href":97},"adfgvx",[643,844,789],{},[643,846,847,794],{},[149,848,584],{},[643,850,657],{"align":635},[621,852,853,858,860,868],{},[643,854,855],{},[590,856,857],{"href":101},"bifid",[643,859,789],{},[643,861,862,864,865,867],{},[149,863,584],{}," optional, ",[149,866,596],{}," (default 5)",[643,869,657],{"align":635},[621,871,872,877,880,885],{},[643,873,874],{},[590,875,876],{"href":105},"rail-fence",[643,878,879],{},"transposition",[643,881,882,884],{},[149,883,587],{}," (default 3)",[643,886,657],{"align":635},[621,888,889,894,896,900],{},[643,890,891],{},[590,892,893],{"href":109},"columnar",[643,895,879],{},[643,897,898],{},[149,899,584],{},[643,901,657],{"align":635},[621,903,904,909,912,920],{},[643,905,906],{},[590,907,908],{"href":113},"enigma",[643,910,911],{},"rotor",[643,913,914,531,916,531,918],{},[149,915,599],{},[149,917,602],{},[149,919,605],{},[643,921,671],{"align":635},[137,923,925],{"id":924},"errors","Errors",[158,927,929],{"className":188,"code":928,"language":191,"meta":163,"style":163},"import { CipherError, InvalidOptionError, MissingOptionError, UnknownCipherError } from \"@agntn\u002Fciphers\";\n\ntry {\n  create(\"caesar\").encode(\"HELLO\", { shift: 26 });\n} catch (error) {\n  if (error instanceof InvalidOptionError) {\n    error.option; \u002F\u002F \"shift\"\n    error.reason; \u002F\u002F why 26 is not a shift\n  }\n}\n",[149,930,931,968,972,980,1020,1037,1053,1068,1082,1087],{"__ignoreMap":163},[167,932,933,935,937,940,943,946,948,951,953,956,958,960,962,964,966],{"class":169,"line":170},[167,934,199],{"class":198},[167,936,203],{"class":202},[167,938,939],{"class":206}," CipherError",[167,941,942],{"class":202},",",[167,944,945],{"class":206}," InvalidOptionError",[167,947,942],{"class":202},[167,949,950],{"class":206}," MissingOptionError",[167,952,942],{"class":202},[167,954,955],{"class":206}," UnknownCipherError",[167,957,210],{"class":202},[167,959,214],{"class":213},[167,961,218],{"class":217},[167,963,151],{"class":221},[167,965,224],{"class":217},[167,967,227],{"class":202},[167,969,970],{"class":169,"line":230},[167,971,234],{"emptyLinePlaceholder":233},[167,973,974,978],{"class":169,"line":237},[167,975,977],{"class":976},"szlwh","try",[167,979,456],{"class":202},[167,981,982,985,987,989,991,993,996,998,1000,1002,1005,1007,1009,1012,1014,1018],{"class":169,"line":267},[167,983,984],{"class":251},"  create",[167,986,254],{"class":202},[167,988,224],{"class":217},[167,990,647],{"class":221},[167,992,224],{"class":217},[167,994,995],{"class":202},").",[167,997,288],{"class":251},[167,999,254],{"class":202},[167,1001,224],{"class":217},[167,1003,1004],{"class":221},"HELLO",[167,1006,224],{"class":217},[167,1008,300],{"class":202},[167,1010,1011],{"class":206}," shift",[167,1013,306],{"class":202},[167,1015,1017],{"class":1016},"siHFe"," 26",[167,1019,316],{"class":202},[167,1021,1022,1025,1028,1031,1034],{"class":169,"line":272},[167,1023,1024],{"class":202},"} ",[167,1026,1027],{"class":976},"catch",[167,1029,1030],{"class":202}," (",[167,1032,1033],{"class":282},"error",[167,1035,1036],{"class":202},") {\n",[167,1038,1039,1042,1044,1046,1049,1051],{"class":169,"line":319},[167,1040,1041],{"class":213},"  if",[167,1043,1030],{"class":202},[167,1045,1033],{"class":282},[167,1047,1048],{"class":240}," instanceof",[167,1050,945],{"class":452},[167,1052,1036],{"class":202},[167,1054,1055,1058,1060,1063,1065],{"class":169,"line":347},[167,1056,1057],{"class":282},"    error",[167,1059,285],{"class":202},[167,1061,1062],{"class":282},"option",[167,1064,471],{"class":202},[167,1066,1067],{"class":343},"\u002F\u002F \"shift\"\n",[167,1069,1070,1072,1074,1077,1079],{"class":169,"line":352},[167,1071,1057],{"class":282},[167,1073,285],{"class":202},[167,1075,1076],{"class":282},"reason",[167,1078,471],{"class":202},[167,1080,1081],{"class":343},"\u002F\u002F why 26 is not a shift\n",[167,1083,1084],{"class":169,"line":391},[167,1085,1086],{"class":202},"  }\n",[167,1088,1090],{"class":169,"line":1089},10,[167,1091,560],{"class":202},[142,1093,1094,1095,1098,1099,1102,1103,1106,1107,1110],{},"No key where a key is required - ",[149,1096,1097],{},"MissingOptionError",". Value out of range - ",[149,1100,1101],{},"InvalidOptionError"," with the option, the value and the reason. Anything else a cipher throws gets wrapped by ",[149,1104,1105],{},"normalizeError"," into a ",[149,1108,1109],{},"CipherError"," that names the cipher. The CLI prints the message and exits 1. No stack trace, you did nothing wrong, the input did.",[137,1112,1114],{"id":1113},"next","Next",[1116,1117,1118,1124,1129,1138,1143,1151],"ul",{},[1119,1120,1121,1123],"li",{},[590,1122,12],{"href":13},": options, case, what happens to punctuation, the round trip.",[1119,1125,1126,1128],{},[590,1127,16],{"href":17},": brute force a Caesar, read a histogram.",[1119,1130,1131,1133,1134,1137],{},[590,1132,20],{"href":21},": the ",[149,1135,1136],{},"ciphers"," command.",[1119,1139,1140,1142],{},[590,1141,24],{"href":25},": five tools over MCP, Pi and OMP.",[1119,1144,1145,1147,1148,1150],{},[590,1146,28],{"href":29},": extend ",[149,1149,626],{},", register it.",[1119,1152,1153,1156],{},[590,1154,32],{"href":1155},"\u002Fplayground",": every cipher, in the page.",[1158,1159,1160],"style",{},"html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}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);}html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html pre.shiki code .szlwh, html code.shiki .szlwh{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#D0679D}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}",{"title":163,"searchDepth":230,"depth":230,"links":1162},[1163,1164,1165,1166,1167,1168,1169],{"id":139,"depth":230,"text":140},{"id":155,"depth":230,"text":156},{"id":184,"depth":230,"text":185},{"id":429,"depth":230,"text":430},{"id":612,"depth":230,"text":613},{"id":924,"depth":230,"text":925},{"id":1113,"depth":230,"text":1114},"Install, encode one line, decode it back. Same shape from every cipher.","md",null,{"icon":35},{"title":10,"description":1170},"SPCoOWVD-iHWAZNrZbulnwHPlOS0ZIc1RkbjoNo1KCQ",[1172,1177],{"title":12,"path":13,"stem":14,"description":1178,"children":-1},"The two methods every cipher has, the two options they share, and what happens to case and punctuation on the way through.",1788614951359]