[{"data":1,"prerenderedAt":697},["ShallowReactive",2],{"navigation_docs":3,"-guide-identify":244,"-guide-identify-surround":692},[4,52],{"title":5,"path":6,"stem":7,"children":8,"icon":51},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43,47],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Hashing","\u002Fguide\u002Fhashing","1.guide\u002F02.hashing",{"title":16,"path":17,"stem":18},"HMAC and verify","\u002Fguide\u002Fverify","1.guide\u002F03.verify",{"title":20,"path":21,"stem":22},"Salted KDFs","\u002Fguide\u002Fkdf","1.guide\u002F04.kdf",{"title":24,"path":25,"stem":26},"Length extension","\u002Fguide\u002Fextend","1.guide\u002F05.extend",{"title":28,"path":29,"stem":30},"Identify a hash","\u002Fguide\u002Fidentify","1.guide\u002F06.identify",{"title":32,"path":33,"stem":34},"Search for a transform","\u002Fguide\u002Fsearch","1.guide\u002F07.search",{"title":36,"path":37,"stem":38},"CLI","\u002Fguide\u002Fcli","1.guide\u002F08.cli",{"title":40,"path":41,"stem":42},"Agents","\u002Fguide\u002Fagents","1.guide\u002F09.agents",{"title":44,"path":45,"stem":46},"Custom algorithms","\u002Fguide\u002Fcustom","1.guide\u002F10.custom",{"title":48,"path":49,"stem":50},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F11.playground","i-lucide-book-open",{"title":53,"path":54,"stem":55,"children":56,"icon":243},"Algorithms","\u002Falgorithms","2.algorithms\u002F00.index",[57,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],{"title":58,"path":54,"stem":55},"Every algorithm",{"title":60,"path":61,"stem":62},"SHA-256","\u002Falgorithms\u002Fsha256","2.algorithms\u002F01.sha256",{"title":64,"path":65,"stem":66},"SHA-384","\u002Falgorithms\u002Fsha384","2.algorithms\u002F02.sha384",{"title":68,"path":69,"stem":70},"SHA-512","\u002Falgorithms\u002Fsha512","2.algorithms\u002F03.sha512",{"title":72,"path":73,"stem":74},"SHA-224","\u002Falgorithms\u002Fsha224","2.algorithms\u002F04.sha224",{"title":76,"path":77,"stem":78},"SHA-512\u002F224","\u002Falgorithms\u002Fsha512-224","2.algorithms\u002F05.sha512-224",{"title":80,"path":81,"stem":82},"SHA-512\u002F256","\u002Falgorithms\u002Fsha512-256","2.algorithms\u002F06.sha512-256",{"title":84,"path":85,"stem":86},"SHA-512Half","\u002Falgorithms\u002Fsha512-half","2.algorithms\u002F07.sha512-half",{"title":88,"path":89,"stem":90},"SHA3-256","\u002Falgorithms\u002Fsha3-256","2.algorithms\u002F08.sha3-256",{"title":92,"path":93,"stem":94},"SHA3-512","\u002Falgorithms\u002Fsha3-512","2.algorithms\u002F09.sha3-512",{"title":96,"path":97,"stem":98},"Keccak-256","\u002Falgorithms\u002Fkeccak256","2.algorithms\u002F10.keccak256",{"title":100,"path":101,"stem":102},"BLAKE2b","\u002Falgorithms\u002Fblake2b","2.algorithms\u002F11.blake2b",{"title":104,"path":105,"stem":106},"BLAKE2b-256","\u002Falgorithms\u002Fblake2b-256","2.algorithms\u002F12.blake2b-256",{"title":108,"path":109,"stem":110},"BLAKE2b-224","\u002Falgorithms\u002Fblake2b-224","2.algorithms\u002F13.blake2b-224",{"title":112,"path":113,"stem":114},"BLAKE2s","\u002Falgorithms\u002Fblake2s","2.algorithms\u002F14.blake2s",{"title":116,"path":117,"stem":118},"BLAKE3","\u002Falgorithms\u002Fblake3","2.algorithms\u002F15.blake3",{"title":120,"path":121,"stem":122},"BLAKE-256","\u002Falgorithms\u002Fblake256","2.algorithms\u002F16.blake256",{"title":124,"path":125,"stem":126},"RIPEMD-160","\u002Falgorithms\u002Fripemd160","2.algorithms\u002F17.ripemd160",{"title":128,"path":129,"stem":130},"RIPEMD-320","\u002Falgorithms\u002Fripemd320","2.algorithms\u002F18.ripemd320",{"title":132,"path":133,"stem":134},"HASH160","\u002Falgorithms\u002Fhash160","2.algorithms\u002F19.hash160",{"title":136,"path":137,"stem":138},"HASH256","\u002Falgorithms\u002Fhash256","2.algorithms\u002F20.hash256",{"title":140,"path":141,"stem":142},"Whirlpool","\u002Falgorithms\u002Fwhirlpool","2.algorithms\u002F21.whirlpool",{"title":144,"path":145,"stem":146},"MD5","\u002Falgorithms\u002Fmd5","2.algorithms\u002F22.md5",{"title":148,"path":149,"stem":150},"MD4","\u002Falgorithms\u002Fmd4","2.algorithms\u002F23.md4",{"title":152,"path":153,"stem":154},"MD2","\u002Falgorithms\u002Fmd2","2.algorithms\u002F24.md2",{"title":156,"path":157,"stem":158},"NTLM","\u002Falgorithms\u002Fntlm","2.algorithms\u002F25.ntlm",{"title":160,"path":161,"stem":162},"SHA-1","\u002Falgorithms\u002Fsha1","2.algorithms\u002F26.sha1",{"title":164,"path":165,"stem":166},"SHA-0","\u002Falgorithms\u002Fsha0","2.algorithms\u002F27.sha0",{"title":168,"path":169,"stem":170},"RIPEMD-128","\u002Falgorithms\u002Fripemd128","2.algorithms\u002F28.ripemd128",{"title":172,"path":173,"stem":174},"RIPEMD-256","\u002Falgorithms\u002Fripemd256","2.algorithms\u002F29.ripemd256",{"title":176,"path":177,"stem":178},"HAVAL","\u002Falgorithms\u002Fhaval","2.algorithms\u002F30.haval",{"title":180,"path":181,"stem":182},"Tiger","\u002Falgorithms\u002Ftiger","2.algorithms\u002F31.tiger",{"title":184,"path":185,"stem":186},"CRC-32","\u002Falgorithms\u002Fcrc32","2.algorithms\u002F32.crc32",{"title":188,"path":189,"stem":190},"CRC-64","\u002Falgorithms\u002Fcrc64","2.algorithms\u002F33.crc64",{"title":192,"path":193,"stem":194},"CRC-24","\u002Falgorithms\u002Fcrc24","2.algorithms\u002F34.crc24",{"title":196,"path":197,"stem":198},"CRC-16\u002FXMODEM","\u002Falgorithms\u002Fcrc16-xmodem","2.algorithms\u002F35.crc16-xmodem",{"title":200,"path":201,"stem":202},"Adler-32","\u002Falgorithms\u002Fadler32","2.algorithms\u002F36.adler32",{"title":204,"path":205,"stem":206},"xxHash","\u002Falgorithms\u002Fxxhash","2.algorithms\u002F37.xxhash",{"title":208,"path":209,"stem":210},"FNV-1a (64-bit)","\u002Falgorithms\u002Ffnv1a","2.algorithms\u002F38.fnv1a",{"title":212,"path":213,"stem":214},"scrypt","\u002Falgorithms\u002Fscrypt","2.algorithms\u002F39.scrypt",{"title":216,"path":217,"stem":218},"PBKDF2","\u002Falgorithms\u002Fpbkdf2","2.algorithms\u002F40.pbkdf2",{"title":220,"path":221,"stem":222},"HKDF","\u002Falgorithms\u002Fhkdf","2.algorithms\u002F41.hkdf",{"title":224,"path":225,"stem":226},"EVP_BytesToKey","\u002Falgorithms\u002Fevp-bytestokey","2.algorithms\u002F42.evp-bytestokey",{"title":228,"path":229,"stem":230},"Argon2id","\u002Falgorithms\u002Fargon2id","2.algorithms\u002F43.argon2id",{"title":232,"path":233,"stem":234},"Argon2i","\u002Falgorithms\u002Fargon2i","2.algorithms\u002F44.argon2i",{"title":236,"path":237,"stem":238},"Argon2d","\u002Falgorithms\u002Fargon2d","2.algorithms\u002F45.argon2d",{"title":240,"path":241,"stem":242},"bcrypt","\u002Falgorithms\u002Fbcrypt","2.algorithms\u002F46.bcrypt","i-lucide-library",{"id":245,"title":28,"body":246,"description":684,"extension":685,"links":686,"meta":687,"navigation":307,"path":29,"seo":689,"stem":30,"__hash__":691},"docs\u002F1.guide\u002F06.identify.md",{"type":247,"value":248,"toc":677},"minimark",[249,254,263,270,368,379,394,401,405,412,476,483,491,498,505,578,589,643,656,660,673],[250,251,253],"h2",{"id":252},"what-made-this-digest","What made this digest?",[255,256,257,258,262],"p",{},"A puzzle hands you ",[259,260,261],"code",{},"5d41402abc4b2a76b9719d911017c592",". No label, no hint. Now what?",[255,264,265,266,269],{},"Thirty-two hex digits make 16 bytes. MD5 makes 16 bytes. So do MD4, MD2, NTLM, RIPEMD-128 and HAVAL. That's all the shape can tell you, and ",[259,267,268],{},"identifyDigest"," tells you exactly that much:",[271,272,277],"pre",{"className":273,"code":274,"language":275,"meta":276,"style":276},"language-ts shiki shiki-themes hashes hashes hashes","import { identifyDigest } from \"@agntn\u002Fhashes\";\n\nconst found = identifyDigest(\"5d41402abc4b2a76b9719d911017c592\");\nfound.length; \u002F\u002F 16\nfound.candidates.map((candidate) => candidate.name);\n\u002F\u002F [\"md5\", \"md4\", \"md2\", \"ntlm\", \"ripemd128\", \"haval\", \"haval\", \"haval\", \"lm\", \"scrypt\", ...]\n","ts","",[259,278,279,302,309,334,344,362],{"__ignoreMap":276},[280,281,284,288,292,295,299],"span",{"class":282,"line":283},"line",1,[280,285,287],{"class":286},"skH_V","import",[280,289,291],{"class":290},"s38Sx"," { identifyDigest } ",[280,293,294],{"class":286},"from",[280,296,298],{"class":297},"shU9J"," \"@agntn\u002Fhashes\"",[280,300,301],{"class":290},";\n",[280,303,305],{"class":282,"line":304},2,[280,306,308],{"emptyLinePlaceholder":307},true,"\n",[280,310,312,315,318,321,325,328,331],{"class":282,"line":311},3,[280,313,314],{"class":286},"const",[280,316,317],{"class":290}," found ",[280,319,320],{"class":286},"=",[280,322,324],{"class":323},"sK71F"," identifyDigest",[280,326,327],{"class":290},"(",[280,329,330],{"class":297},"\"5d41402abc4b2a76b9719d911017c592\"",[280,332,333],{"class":290},");\n",[280,335,337,340],{"class":282,"line":336},4,[280,338,339],{"class":290},"found.length; ",[280,341,343],{"class":342},"scIB-","\u002F\u002F 16\n",[280,345,347,350,353,356,359],{"class":282,"line":346},5,[280,348,349],{"class":290},"found.candidates.",[280,351,352],{"class":323},"map",[280,354,355],{"class":290},"((candidate) ",[280,357,358],{"class":286},"=>",[280,360,361],{"class":290}," candidate.name);\n",[280,363,365],{"class":282,"line":364},6,[280,366,367],{"class":342},"\u002F\u002F [\"md5\", \"md4\", \"md2\", \"ntlm\", \"ripemd128\", \"haval\", \"haval\", \"haval\", \"lm\", \"scrypt\", ...]\n",[255,369,370,371,374,375,378],{},"A whole column of them from one dump? Pass the list. ",[259,372,373],{},"identifyDigest([first, second])"," answers once per hash, in order. ",[259,376,377],{},"hashes identify first second"," does the same from a shell.",[255,380,381,382,385,386,389,390,393],{},"Why HAVAL three times? Three pass counts, and 16 bytes fit them all. The two that aren't the default carry ",[259,383,384],{},"passes"," in their ",[259,387,388],{},"parameters",", ready for ",[259,391,392],{},"hashes_verify",".",[255,395,396,397,400],{},"LM comes without an ",[259,398,399],{},"algorithm",". This package can't compute it, and the list says so instead of hiding it. The KDFs go last. They make any length you ask for, so they fit everything and prove nothing.",[250,402,404],{"id":403},"which-one-is-it","Which one is it?",[255,406,407,408,411],{},"Hash something you know and compare. A guess with a ",[259,409,410],{},"MATCH"," stops being a guess.",[271,413,417],{"className":414,"code":415,"language":416,"meta":276,"style":276},"language-bash shiki shiki-themes hashes hashes hashes","hashes identify 5d41402abc4b2a76b9719d911017c592 2>\u002Fdev\u002Fnull | head -2\n# md5: MD5, computable\n# md4: MD4, computable\nhashes verify md5 hello 5d41402abc4b2a76b9719d911017c592\n# MATCH md5 5d41402abc4b2a76b9719d911017c592\n","bash",[259,418,419,445,450,455,471],{"__ignoreMap":276},[280,420,421,424,427,430,433,436,439,442],{"class":282,"line":283},[280,422,423],{"class":323},"hashes",[280,425,426],{"class":297}," identify",[280,428,429],{"class":297}," 5d41402abc4b2a76b9719d911017c592",[280,431,432],{"class":286}," 2>",[280,434,435],{"class":297},"\u002Fdev\u002Fnull",[280,437,438],{"class":286}," |",[280,440,441],{"class":323}," head",[280,443,444],{"class":297}," -2\n",[280,446,447],{"class":282,"line":304},[280,448,449],{"class":342},"# md5: MD5, computable\n",[280,451,452],{"class":282,"line":311},[280,453,454],{"class":342},"# md4: MD4, computable\n",[280,456,457,459,462,465,468],{"class":282,"line":336},[280,458,423],{"class":323},[280,460,461],{"class":297}," verify",[280,463,464],{"class":297}," md5",[280,466,467],{"class":297}," hello",[280,469,470],{"class":297}," 5d41402abc4b2a76b9719d911017c592\n",[280,472,473],{"class":282,"line":346},[280,474,475],{"class":342},"# MATCH md5 5d41402abc4b2a76b9719d911017c592\n",[255,477,478,479,482],{},"Equal lengths still get an order. MD5 beats MD4, SHA-1 beats RIPEMD-160, SHA-256 beats the other 32-byte digests. Boring, but that's what you'll actually meet. A ",[259,480,481],{},"0x"," in front puts Keccak-256 first, since that's how Ethereum writes it. Base64 works too, and then the answer also prints the bytes in hex.",[250,484,486,487,490],{"id":485},"what-about-2b-and-friends","What about ",[259,488,489],{},"$2b$"," and friends?",[255,492,493,494,497],{},"Password hashes wear a prefix. The prefix says more than any length could. bcrypt, Argon2, SHA-512 and SHA-256 crypt, MD5 crypt, yescrypt, scrypt, PBKDF2 from passlib and Django, MySQL's ",[259,495,496],{},"*"," hashes. All named.",[255,499,500,501,504],{},"For the ones this package computes, it reads the salt, the costs and the digest out of the string. Copy them into ",[259,502,503],{},"verify"," and you're done:",[271,506,508],{"className":414,"code":507,"language":416,"meta":276,"style":276},"hashes identify '$argon2id$v=19$m=1024,t=2,p=2$c29tZXNhbHRzYWx0$8mkYn4qtK5HHJtQQI+FNQKE4UECfkb5diD560\u002Fy7mZs' 2>\u002Fdev\u002Fnull\n# argon2id: Argon2id, PHC string, computable, salt 736f6d6573616c7473616c74, memory 1024, iterations 2, parallelism 2, keyLength 32, expected f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b\nhashes verify argon2id password f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b --salt 736f6d6573616c7473616c74 --memory 1024 --iterations 2 --parallelism 2 --key-length 32\n# MATCH argon2id f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b\n",[259,509,510,524,529,573],{"__ignoreMap":276},[280,511,512,514,516,519,521],{"class":282,"line":283},[280,513,423],{"class":323},[280,515,426],{"class":297},[280,517,518],{"class":297}," '$argon2id$v=19$m=1024,t=2,p=2$c29tZXNhbHRzYWx0$8mkYn4qtK5HHJtQQI+FNQKE4UECfkb5diD560\u002Fy7mZs'",[280,520,432],{"class":286},[280,522,523],{"class":297},"\u002Fdev\u002Fnull\n",[280,525,526],{"class":282,"line":304},[280,527,528],{"class":342},"# argon2id: Argon2id, PHC string, computable, salt 736f6d6573616c7473616c74, memory 1024, iterations 2, parallelism 2, keyLength 32, expected f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b\n",[280,530,531,533,535,538,541,544,547,550,553,556,559,562,565,567,570],{"class":282,"line":311},[280,532,423],{"class":323},[280,534,461],{"class":297},[280,536,537],{"class":297}," argon2id",[280,539,540],{"class":297}," password",[280,542,543],{"class":297}," f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b",[280,545,546],{"class":297}," --salt",[280,548,549],{"class":297}," 736f6d6573616c7473616c74",[280,551,552],{"class":297}," --memory",[280,554,555],{"class":297}," 1024",[280,557,558],{"class":297}," --iterations",[280,560,561],{"class":297}," 2",[280,563,564],{"class":297}," --parallelism",[280,566,561],{"class":297},[280,568,569],{"class":297}," --key-length",[280,571,572],{"class":297}," 32\n",[280,574,575],{"class":282,"line":336},[280,576,577],{"class":342},"# MATCH argon2id f269189f8aad2b91c726d41023e14d40a13850409f91be5d883e7ad3fcbb999b\n",[255,579,580,581,584,585,588],{},"bcrypt works the same way. Got a ",[259,582,583],{},"$2y$"," line from ",[259,586,587],{},".htpasswd","? It comes back as salt, cost and expected, all in hex:",[271,590,592],{"className":414,"code":591,"language":416,"meta":276,"style":276},"hashes identify '$2y$04$X2kfXDUfLpgiqo1O5Bq6z.EhPme.LvywDHaK1QMd12JWp.XkUnIo6' 2>\u002Fdev\u002Fnull\n# bcrypt: bcrypt, computable, salt 6789a16455a136b8a4b2add0ec3b3cd4, cost 4, expected 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf\nhashes verify bcrypt ProbablyFine-2026 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf --salt 6789a16455a136b8a4b2add0ec3b3cd4 --cost 4\n# MATCH bcrypt 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf\n",[259,593,594,607,612,638],{"__ignoreMap":276},[280,595,596,598,600,603,605],{"class":282,"line":283},[280,597,423],{"class":323},[280,599,426],{"class":297},[280,601,602],{"class":297}," '$2y$04$X2kfXDUfLpgiqo1O5Bq6z.EhPme.LvywDHaK1QMd12JWp.XkUnIo6'",[280,604,432],{"class":286},[280,606,523],{"class":297},[280,608,609],{"class":282,"line":304},[280,610,611],{"class":342},"# bcrypt: bcrypt, computable, salt 6789a16455a136b8a4b2add0ec3b3cd4, cost 4, expected 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf\n",[280,613,614,616,618,621,624,627,629,632,635],{"class":282,"line":311},[280,615,423],{"class":323},[280,617,461],{"class":297},[280,619,620],{"class":297}," bcrypt",[280,622,623],{"class":297}," ProbablyFine-2026",[280,625,626],{"class":297}," 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf",[280,628,546],{"class":297},[280,630,631],{"class":297}," 6789a16455a136b8a4b2add0ec3b3cd4",[280,633,634],{"class":297}," --cost",[280,636,637],{"class":297}," 4\n",[280,639,640],{"class":282,"line":336},[280,641,642],{"class":342},"# MATCH bcrypt 1a3468800371d3214970cdd239fdf82d8ac06665a92aaf\n",[255,644,645,648,649,652,653,393],{},[259,646,647],{},"$2x$"," only gets a name. It's crypt_blowfish's old sign bug, and nobody here wants to run it on purpose. The crypt family gets a name and ",[259,650,651],{},"not in this package"," too. Honest beats helpful here. Keep the single quotes, by the way. Without them the shell eats every ",[259,654,655],{},"$",[250,657,659],{"id":658},"can-it-prove-anything","Can it prove anything?",[255,661,662,663,666,667,670,671,393],{},"No. A digest is just bytes. Any 16 bytes could be MD5, half of something longer, or plain noise. Identify narrows the list, ",[664,665,503],"a",{"href":17}," settles it. The ",[259,668,669],{},"hashes_digest_identify"," tool tells the model the same, then points it at ",[259,672,392],{},[674,675,676],"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 .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 .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 .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":276,"searchDepth":304,"depth":304,"links":678},[679,680,681,683],{"id":252,"depth":304,"text":253},{"id":403,"depth":304,"text":404},{"id":485,"depth":304,"text":682},"What about $2b$ and friends?",{"id":658,"depth":304,"text":659},"A digest with no name on it. Read its prefix or its length and list the algorithms that fit. Each one says if hashes can compute it","md",null,{"icon":688},"i-lucide-scan-search",{"title":690,"description":684},"Identify a hash type by its length or prefix in TypeScript","QrXo1aWxcSqDV6BpqU0zYQ7gEw18oPLEmYds7cyvfPA",[693,695],{"title":24,"path":25,"stem":26,"description":694,"children":-1},"Forge the digest of a longer message from a known MD5 or SHA-256 digest and the length of the secret. The secret itself stays unknown",{"title":32,"path":33,"stem":34,"description":696,"children":-1},"You have the words and the digest. Find the order and the joiner and the case and the algorithm that turn one into the other",1791911606468]