[{"data":1,"prerenderedAt":741},["ShallowReactive",2],{"tool-content:chacha20-poly1305":3,"published-tool-content":527},{"id":4,"title":5,"body":6,"category":502,"dataVersion":503,"description":504,"extension":505,"featured":506,"icon":507,"keywords":508,"meta":514,"navigation":506,"path":515,"seo":516,"seoTitle":517,"slug":518,"status":519,"stem":520,"updatedAt":521,"usageTips":522,"__hash__":526},"tools\u002Ftools\u002Fchacha20-poly1305.md","ChaCha20-Poly1305 加解密工具",{"type":7,"value":8,"toc":481},"minimark",[9,13,17,20,33,36,39,48,51,59,66,69,130,133,136,141,144,148,151,155,158,166,169,172,176,405,423,426,429,443,446,449,453,456,460,463,467,470,474,477],[10,11,12],"h2",{"id":12},"什么时候使用",[14,15,16],"p",{},"适合需要现代带认证加密、运行环境对 AES 硬件加速依赖较少，或需要对接 RFC 8439 的场景。没有明确互操作要求时，优先使用默认的 XChaCha20-Poly1305。",[10,18,19],{"id":19},"快速使用",[21,22,23,27,30],"ol",{},[24,25,26],"li",{},"保持默认参数，点击“生成随机密钥”。",[24,28,29],{},"输入明文并执行加密。",[24,31,32],{},"分别保存密钥和 ChaCha v1 JSON；解密时粘贴 JSON，页面会自动同步算法与密钥来源。",[10,34,35],{"id":35},"工具说明",[14,37,38],{},"这个工具使用 ChaCha20 流加密和 Poly1305 消息认证处理 UTF-8 文本，提供两个带认证的 AEAD 算法：",[40,41,42,45],"ul",{},[24,43,44],{},"ChaCha20-Poly1305：12 字节 nonce，遵循 RFC 8439。",[24,46,47],{},"XChaCha20-Poly1305：24 字节 nonce，默认推荐。",[14,49,50],{},"两种算法都使用 32 字节密钥和 16 字节认证标签。工具不提供没有 Poly1305 认证的纯 ChaCha20，避免把不能检测篡改的密文误用于生产场景。",[14,52,53,54,58],{},"页面默认使用 ",[55,56,57],"code",{},"XChaCha20-Poly1305 + Base64 原始密钥 + ChaCha v1 JSON","。也可以改用 RFC 8439 的 ChaCha20-Poly1305、PBKDF2 口令派生或原始参数模式；两种算法都支持 UTF-8 和标准 Base64 AAD。",[14,60,61,62,65],{},"密钥、口令、AAD、明文和密文只在当前浏览器中处理，不会上传或保存。算法实现来自项目已有的 ",[55,63,64],{},"@noble\u002Fciphers","。",[10,67,68],{"id":68},"算法选择",[70,71,72,94],"table",{},[73,74,75],"thead",{},[76,77,78,82,85,88,91],"tr",{},[79,80,81],"th",{},"算法",[79,83,84],{},"密钥",[79,86,87],{},"nonce",[79,89,90],{},"认证标签",[79,92,93],{},"建议",[95,96,97,115],"tbody",{},[76,98,99,103,106,109,112],{},[100,101,102],"td",{},"ChaCha20-Poly1305",[100,104,105],{},"32 字节",[100,107,108],{},"12 字节",[100,110,111],{},"16 字节",[100,113,114],{},"对接要求 RFC 8439 的系统",[76,116,117,120,122,125,127],{},[100,118,119],{},"XChaCha20-Poly1305",[100,121,105],{},[100,123,124],{},"24 字节",[100,126,111],{},[100,128,129],{},"默认推荐，更适合随机 nonce",[14,131,132],{},"同一密钥下 nonce 绝不能重复。本工具每次加密都使用浏览器安全随机数生成新 nonce；不要手动复用旧密文中的 nonce 加密新内容。",[10,134,135],{"id":135},"密钥来源",[137,138,140],"h3",{"id":139},"base64-原始密钥","Base64 原始密钥",[14,142,143],{},"输入必须是标准 Base64 编码的 32 字节数据。可以粘贴外部密钥，也可以在浏览器中生成随机密钥。",[137,145,147],{"id":146},"pbkdf2-口令派生","PBKDF2 口令派生",[14,149,150],{},"口令模式使用 PBKDF2-HMAC-SHA-256、600000 次迭代和每次随机生成的 16 字节盐，派生 256 位密钥。JSON 会保存盐和派生参数，但不会保存口令。",[10,152,154],{"id":153},"aad","AAD",[14,156,157],{},"AAD 不会被加密，但会参与 Poly1305 认证。页面支持：",[40,159,160,163],{},[24,161,162],{},"UTF-8 文本：先使用 UTF-8 转换为字节。",[24,164,165],{},"标准 Base64：直接表示任意 AAD 字节。",[14,167,168],{},"解密时必须提供完全相同的 AAD，否则认证失败。v1 JSON 会保存最终 AAD 字节的 Base64；原始参数模式需要手动重新输入。",[10,170,171],{"id":171},"密文格式",[137,173,175],{"id":174},"chacha-v1-json","ChaCha v1 JSON",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"v\": 1,\n  \"alg\": \"XChaCha20-Poly1305\",\n  \"secretMode\": \"passphrase\",\n  \"nonce\": \"\u003C24-byte Base64>\",\n  \"ciphertext\": \"\u003CBase64>\",\n  \"authTag\": \"\u003C16-byte Base64>\",\n  \"aad\": \"\u003Coptional Base64>\",\n  \"kdf\": \"PBKDF2-HMAC-SHA-256\",\n  \"iterations\": 600000,\n  \"salt\": \"\u003C16-byte Base64>\"\n}\n","json","",[55,184,185,194,217,239,260,280,301,322,342,363,380,399],{"__ignoreMap":182},[186,187,190],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sMK4o","{\n",[186,195,197,200,204,207,210,214],{"class":188,"line":196},2,[186,198,199],{"class":192},"  \"",[186,201,203],{"class":202},"spNyl","v",[186,205,206],{"class":192},"\"",[186,208,209],{"class":192},":",[186,211,213],{"class":212},"sbssI"," 1",[186,215,216],{"class":192},",\n",[186,218,220,222,225,227,229,232,235,237],{"class":188,"line":219},3,[186,221,199],{"class":192},[186,223,224],{"class":202},"alg",[186,226,206],{"class":192},[186,228,209],{"class":192},[186,230,231],{"class":192}," \"",[186,233,119],{"class":234},"sfazB",[186,236,206],{"class":192},[186,238,216],{"class":192},[186,240,242,244,247,249,251,253,256,258],{"class":188,"line":241},4,[186,243,199],{"class":192},[186,245,246],{"class":202},"secretMode",[186,248,206],{"class":192},[186,250,209],{"class":192},[186,252,231],{"class":192},[186,254,255],{"class":234},"passphrase",[186,257,206],{"class":192},[186,259,216],{"class":192},[186,261,263,265,267,269,271,273,276,278],{"class":188,"line":262},5,[186,264,199],{"class":192},[186,266,87],{"class":202},[186,268,206],{"class":192},[186,270,209],{"class":192},[186,272,231],{"class":192},[186,274,275],{"class":234},"\u003C24-byte Base64>",[186,277,206],{"class":192},[186,279,216],{"class":192},[186,281,283,285,288,290,292,294,297,299],{"class":188,"line":282},6,[186,284,199],{"class":192},[186,286,287],{"class":202},"ciphertext",[186,289,206],{"class":192},[186,291,209],{"class":192},[186,293,231],{"class":192},[186,295,296],{"class":234},"\u003CBase64>",[186,298,206],{"class":192},[186,300,216],{"class":192},[186,302,304,306,309,311,313,315,318,320],{"class":188,"line":303},7,[186,305,199],{"class":192},[186,307,308],{"class":202},"authTag",[186,310,206],{"class":192},[186,312,209],{"class":192},[186,314,231],{"class":192},[186,316,317],{"class":234},"\u003C16-byte Base64>",[186,319,206],{"class":192},[186,321,216],{"class":192},[186,323,325,327,329,331,333,335,338,340],{"class":188,"line":324},8,[186,326,199],{"class":192},[186,328,153],{"class":202},[186,330,206],{"class":192},[186,332,209],{"class":192},[186,334,231],{"class":192},[186,336,337],{"class":234},"\u003Coptional Base64>",[186,339,206],{"class":192},[186,341,216],{"class":192},[186,343,345,347,350,352,354,356,359,361],{"class":188,"line":344},9,[186,346,199],{"class":192},[186,348,349],{"class":202},"kdf",[186,351,206],{"class":192},[186,353,209],{"class":192},[186,355,231],{"class":192},[186,357,358],{"class":234},"PBKDF2-HMAC-SHA-256",[186,360,206],{"class":192},[186,362,216],{"class":192},[186,364,366,368,371,373,375,378],{"class":188,"line":365},10,[186,367,199],{"class":192},[186,369,370],{"class":202},"iterations",[186,372,206],{"class":192},[186,374,209],{"class":192},[186,376,377],{"class":212}," 600000",[186,379,216],{"class":192},[186,381,383,385,388,390,392,394,396],{"class":188,"line":382},11,[186,384,199],{"class":192},[186,386,387],{"class":202},"salt",[186,389,206],{"class":192},[186,391,209],{"class":192},[186,393,231],{"class":192},[186,395,317],{"class":234},[186,397,398],{"class":192},"\"\n",[186,400,402],{"class":188,"line":401},12,[186,403,404],{"class":192},"}\n",[40,406,407,412,417,420],{},[24,408,409,411],{},[55,410,287],{}," 不包含认证标签。",[24,413,414,415,65],{},"没有 AAD 时省略 ",[55,416,153],{},[24,418,419],{},"原始密钥模式省略 KDF、迭代次数和盐。",[24,421,422],{},"解密时页面会读取 JSON 中的算法和密钥来源，并自动同步页面参数。",[137,424,425],{"id":425},"原始参数",[14,427,428],{},"原始参数模式分别显示：",[40,430,431,434,437,440],{},[24,432,433],{},"Base64 密文。",[24,435,436],{},"12 或 24 字节 Base64 nonce。",[24,438,439],{},"16 字节 Base64 认证标签。",[24,441,442],{},"口令模式使用的 16 字节 Base64 盐值。",[14,444,445],{},"原始参数不携带算法和密钥来源，解密时需要手动选择正确配置并保留全部参数。",[10,447,448],{"id":448},"常见问题",[137,450,452],{"id":451},"chacha20-poly1305-和-xchacha20-poly1305-有什么区别","ChaCha20-Poly1305 和 XChaCha20-Poly1305 有什么区别？",[14,454,455],{},"主要区别是 nonce 长度。ChaCha20-Poly1305 使用 12 字节 nonce，适合对接 RFC 8439；XChaCha20-Poly1305 使用 24 字节 nonce，更适合直接通过安全随机数生成。",[137,457,459],{"id":458},"为什么修改密文后无法解密","为什么修改密文后无法解密？",[14,461,462],{},"Poly1305 会认证密文和 AAD。密钥、nonce、AAD、密文或认证标签任意一项不匹配，解密都会失败。",[137,464,466],{"id":465},"可以只使用-chacha20不使用-poly1305-吗","可以只使用 ChaCha20、不使用 Poly1305 吗？",[14,468,469],{},"本工具不提供这种模式。纯 ChaCha20 不能检测密文篡改，容易被误用；这里仅提供带认证的 AEAD 组合。",[137,471,473],{"id":472},"密钥和内容会上传吗","密钥和内容会上传吗？",[14,475,476],{},"不会。随机数生成、密钥派生、加密、认证、解密和复制都在当前浏览器中完成。",[478,479,480],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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":182,"searchDepth":196,"depth":196,"links":482},[483,484,485,486,487,491,492,496],{"id":12,"depth":196,"text":12},{"id":19,"depth":196,"text":19},{"id":35,"depth":196,"text":35},{"id":68,"depth":196,"text":68},{"id":135,"depth":196,"text":135,"children":488},[489,490],{"id":139,"depth":219,"text":140},{"id":146,"depth":219,"text":147},{"id":153,"depth":196,"text":154},{"id":171,"depth":196,"text":171,"children":493},[494,495],{"id":174,"depth":219,"text":175},{"id":425,"depth":219,"text":425},{"id":448,"depth":196,"text":448,"children":497},[498,499,500,501],{"id":451,"depth":219,"text":452},{"id":458,"depth":219,"text":459},{"id":465,"depth":219,"text":466},{"id":472,"depth":219,"text":473},"crypto","chacha20-poly1305-envelope-v1","使用 ChaCha20 或 XChaCha20-Poly1305 安全加解密文本，适合现代 AEAD 或对接 RFC 8439 的场景。","md",true,"i-lucide-shield-check",[102,119,509,510,511,512,154,513],"ChaCha20 加密","Poly1305","RFC 8439","AEAD","PBKDF2",{},"\u002Ftools\u002Fchacha20-poly1305",{"title":5,"description":504},"ChaCha20-Poly1305 加解密工具 - XChaCha20、AAD 与原始参数","chacha20-poly1305","published","tools\u002Fchacha20-poly1305","2026-07-25",[523,524,525],"不确定参数时保持默认的 XChaCha20-Poly1305、Base64 密钥和 v1 JSON","只有对接方明确要求 RFC 8439 时，才切换到 ChaCha20-Poly1305","解密 v1 JSON 时会自动识别算法和密钥来源；原始参数模式需要手动保存全部参数","P9ckQO10OTdvsWDE58b3epmNWIZgA4DiLt4zyVx2u8M",[528,544,556,568,570,582,594,606,618,630,643,654,667,680,692,706,718,729],{"slug":529,"title":530,"description":531,"status":519,"icon":532,"keywords":533,"featured":506},"asymmetric-encryption","RSA 非对称加解密工具","使用 RSA 公钥加密、私钥解密短文本；支持常见 PEM、JWK、X.509 公钥和旧系统兼容参数。","i-lucide-key-round",[534,535,536,537,538,539,540,541,542,543],"RSA 加密","RSA 解密","RSA-OAEP","PKCS1Padding","OAEPWithSHA-256AndMGF1Padding","RSA 密钥生成","PEM 密钥","RSA JWK","PKCS#1 密钥","X.509 证书",{"slug":545,"title":546,"description":547,"status":519,"icon":548,"keywords":549,"featured":506},"base58-converter","Base58 编解码工具","在线使用 Bitcoin Base58 编解码 UTF-8 文本或 Hex 字节，并以文本、Hex 或二进制文件查看解码结果。","i-lucide-binary",[550,551,552,553,554,555],"Base58 编解码","Base58 编码","Base58 解码","Bitcoin Base58","Hex 转 Base58","Base58 在线工具",{"slug":557,"title":558,"description":559,"status":519,"icon":560,"keywords":561,"featured":506},"base64-converter","Base64 编解码工具","在线转换标准 Base64 与 Base64URL，支持 UTF-8 文本、Hex 字节、文件编码及二进制解码下载。","i-lucide-file-key-2",[562,563,564,565,566,567],"Base64 编解码","Base64URL","文件转 Base64","Hex 转 Base64","Base64 解码","Base64 在线工具",{"slug":518,"title":5,"description":504,"status":519,"icon":507,"keywords":569,"featured":506},[102,119,509,510,511,512,154,513],{"slug":571,"title":572,"description":573,"status":519,"icon":574,"keywords":575,"featured":506},"hex-converter","Hex 编解码工具","在线转换 UTF-8 文本与十六进制字节，支持大小写、0x 前缀以及空格或冒号分隔格式。","i-lucide-hash",[576,577,578,579,580,581],"Hex 编解码","十六进制编码","十六进制解码","文本转 Hex","0x Hex","Hex 在线工具",{"slug":583,"title":584,"description":585,"status":519,"icon":586,"keywords":587,"featured":506},"hybrid-encryption","RSA + AES 混合加解密工具","使用接收方 RSA 公钥加密较长文本：RSA 包装随机 AES-256 密钥，正文由 AES-GCM 保护。","i-lucide-package-check",[588,589,536,590,591,592,593],"混合加密","RSA AES","AES-256-GCM","数字信封","会话密钥","Hybrid Encryption",{"slug":595,"title":596,"description":597,"status":519,"icon":598,"keywords":599,"featured":506},"json-formatter","JSON 格式化与校验工具","在线校验、格式化和压缩 JSON 数据，支持 JSONC 单行与块注释，可准确定位格式错误，内容仅在浏览器本地处理。","i-lucide-braces",[600,601,602,603,604,605],"JSON 格式化","JSON 校验","JSON 压缩","JSONC","JSON 在线工具","JSON 注释",{"slug":607,"title":608,"description":609,"status":519,"icon":610,"keywords":611,"featured":506},"md5-generator","MD5 哈希工具","在线计算文本或文件的 MD5 摘要，支持十六进制大小写和 Base64 输出，内容仅在浏览器本地处理。","i-lucide-fingerprint",[612,613,614,615,616,617],"MD5 工具","MD5 哈希","文件 MD5","MD5 Base64","文本 MD5","MD5 摘要",{"slug":619,"title":620,"description":621,"status":519,"icon":622,"keywords":623,"featured":506},"qr-code","二维码生成与识别工具","在线生成二维码并下载 PNG 或 SVG，也可上传图片识别二维码内容；文本和图片只在浏览器本地处理。","i-lucide-qr-code",[624,625,626,627,628,629],"二维码生成","二维码识别","二维码解析","QR Code","在线二维码工具","二维码图片",{"slug":631,"title":632,"description":633,"status":519,"icon":560,"keywords":634,"featured":506},"rsa-key-converter","RSA 密钥格式转换与解析工具","识别 RSA 密钥或证书的实际格式，在 PEM、DER、JWK 之间转换，并用指纹核对是否为同一公钥。",[635,636,637,638,639,640,641,642],"RSA 密钥转换","PEM 转 JWK","JWK 转 PEM","PKCS#1 转 PKCS#8","SPKI 公钥","DER 解析","X.509 证书解析","RSA 指纹",{"slug":644,"title":645,"description":646,"status":519,"icon":507,"keywords":647,"featured":506},"sha256-generator","SHA-256 哈希工具","在线计算文本或文件的 SHA-256 摘要，支持十六进制大小写和 Base64 输出，内容仅在浏览器本地处理。",[648,649,650,651,652,653],"SHA-256 工具","SHA256 哈希","文件 SHA256","SHA256 Base64","文本 SHA256","SHA-256 摘要",{"slug":655,"title":656,"description":657,"status":519,"icon":532,"keywords":658,"featured":506},"sm2-encryption","SM2 公钥加解密工具","面向国密公钥加密生成 SM2 密钥对并处理文本，支持常见 C1C3C2 与旧式 C1C2C3 排列。",[659,660,661,662,663,664,665,666],"SM2 加密","SM2 解密","C1C3C2","C1C2C3","国密算法","SM2 密钥生成","压缩公钥","Hex 密文",{"slug":668,"title":669,"description":670,"status":519,"icon":671,"keywords":672,"featured":506},"sm4-encryption","SM4 对称加解密工具","面向国密系统使用 SM4-CBC 或 SM4-ECB 加解密文本，并与 Hex、Base64 密文接口联调。","i-lucide-lock-keyhole",[673,674,675,676,677,678,663,666,679],"SM4 加密","SM4 解密","SM4-CBC","SM4-ECB","PKCS7","NoPadding","Base64 密文",{"slug":681,"title":682,"description":683,"status":519,"icon":684,"keywords":685,"featured":506},"social-insurance","五险一金计算器","按城市、逐月工资、个人缴费基数和专项附加扣除，估算个人五险一金、累计预扣个税与税后收入。","i-lucide-calculator",[686,687,688,689,690,691],"五险一金","社保计算","公积金计算","缴费基数","税后工资","个税计算",{"slug":693,"title":694,"description":695,"status":519,"icon":671,"keywords":696,"featured":506},"symmetric-encryption","AES 对称加解密工具","使用共享密钥或口令加解密文本；默认采用 AES-256-GCM，并保留 CBC、CTR、CFB、ECB 等兼容模式。",[697,698,699,700,701,702,703,513,704,705],"AES 加密","AES 解密","AES-GCM","AES-CBC","AES-ECB","PKCS7Padding","ZeroPadding","AES AAD","AES 原始参数",{"slug":707,"title":708,"description":709,"status":519,"icon":710,"keywords":711,"featured":506},"timestamp-converter","时间戳转换工具","在线完成 Unix 时间戳与日期时间互转，自动识别秒或毫秒，支持 IANA 时区和多行批量转换。","i-lucide-clock-3",[712,713,714,715,716,717],"时间戳转换","Unix 时间戳","timestamp","日期转时间戳","时间戳转日期","毫秒时间戳",{"slug":719,"title":720,"description":721,"status":519,"icon":548,"keywords":722,"featured":506},"unicode-converter","Unicode 转换工具","在线将中文、Emoji 等普通文本转换为 \\uXXXX Unicode 转义，或把 Unicode 转义还原为可读文本，内容仅在浏览器本地处理。",[723,724,725,726,727,728],"Unicode 转换","Unicode 转中文","中文转 Unicode","Unicode 编码","Unicode 解码","Unicode 在线工具",{"slug":730,"title":731,"description":732,"status":519,"icon":733,"keywords":734,"featured":506},"yaml-json-converter","YAML 校验与 JSON 互转工具","在线校验 YAML 或 JSON 格式，并在 YAML 与标准 JSON 之间双向转换，可定位常见语法错误，内容仅在浏览器本地处理。","i-lucide-file-json-2",[735,736,737,738,739,740],"YAML 校验","YAML 转 JSON","JSON 转 YAML","YAML JSON 互转","YAML 在线工具","YAML 格式检查",1784957143881]