[{"data":1,"prerenderedAt":501},["ShallowReactive",2],{"tool-content:sm4-encryption":3,"published-tool-content":288},{"id":4,"title":5,"body":6,"category":261,"dataVersion":262,"description":263,"extension":264,"featured":265,"icon":266,"keywords":267,"meta":275,"navigation":265,"path":276,"seo":277,"seoTitle":278,"slug":279,"status":280,"stem":281,"updatedAt":282,"usageTips":283,"__hash__":287},"tools\u002Ftools\u002Fsm4-encryption.md","SM4 对称加解密工具",{"type":7,"value":8,"toc":236},"minimark",[9,13,17,20,33,36,39,51,59,66,69,73,76,80,83,86,96,99,107,110,116,119,123,126,129,133,136,139,142,195,198,201,205,208,212,215,219,222,226,229,233],[10,11,12],"h2",{"id":12},"什么时候使用",[14,15,16],"p",{},"适合对接明确要求国密 SM4 的接口、协议或已有系统。新协议如果没有国密合规要求，应优先选择带认证的 AES-GCM 或 ChaCha20-Poly1305。",[10,18,19],{"id":19},"快速使用",[21,22,23,27,30],"ol",{},[24,25,26],"li",{},"保持默认的 CBC + PKCS7 + Hex，点击“生成密钥和 IV”。",[24,28,29],{},"输入明文并执行加密。",[24,31,32],{},"保存密钥、IV 和密文；解密时使用完全相同的模式、填充与编码。",[10,34,35],{"id":35},"工具说明",[14,37,38],{},"这个工具使用 128 位 SM4 分组密码加解密 UTF-8 文本，支持：",[40,41,42,45,48],"ul",{},[24,43,44],{},"工作模式：CBC、ECB。",[24,46,47],{},"填充：PKCS7、NoPadding。",[24,49,50],{},"密文编码：Hex、标准 Base64。",[14,52,53,54,58],{},"页面默认使用 ",[55,56,57],"code",{},"CBC + PKCS7 + Hex","。可以在浏览器中同时生成新的 16 字节随机密钥和 CBC IV；输出是原始密文，不会把模式、填充或 IV 自动封装进去。",[14,60,61,62,65],{},"密钥、IV、明文和密文只在当前浏览器中处理，不会上传或保存。SM4 实现精确使用 ",[55,63,64],{},"sm-crypto-v2@1.15.1","。",[10,67,68],{"id":68},"参数说明",[70,71,72],"h3",{"id":72},"密钥",[14,74,75],{},"SM4 密钥始终是 128 位，也就是 16 字节。页面使用 Hex 输入，因此规范化后应包含 32 个十六进制字符。",[70,77,79],{"id":78},"iv","IV",[14,81,82],{},"CBC 模式需要 16 字节 IV。IV 不要求保密，但同一密钥下加密不同消息时应使用新的随机 IV，并与密文一起保存。",[14,84,85],{},"ECB 模式不使用 IV。",[14,87,88,89,92,93,95],{},"密钥和 IV 的 Hex 输入接受整体 ",[55,90,91],{},"0x","、按字节书写的 ",[55,94,91],{},"、空格和冒号；页面生成结果固定为连续小写 Hex。",[70,97,98],{"id":98},"密文编码",[40,100,101,104],{},[24,102,103],{},"Hex：每个字节使用两个十六进制字符表示，适合协议字段和标准向量。",[24,105,106],{},"Base64：表示相同密文字节，通常更紧凑。",[14,108,109],{},"切换编码不会改变 SM4 算法本身。解密时必须选择与输入一致的编码。",[14,111,112,113,115],{},"Hex 密文也接受整体或按字节的 ",[55,114,91],{},"、空格和冒号；Base64 密文使用标准 Base64。",[10,117,118],{"id":118},"填充模式",[70,120,122],{"id":121},"pkcs7","PKCS7",[14,124,125],{},"PKCS7 会把明文补齐到 16 字节分组边界。即使明文已经是 16 的倍数，也会额外增加一个完整填充分组。",[14,127,128],{},"解密时页面严格检查每个 PKCS7 填充字节。错误密钥、IV、模式或被修改的密文通常会导致填充或 UTF-8 校验失败。",[70,130,132],{"id":131},"nopadding","NoPadding",[14,134,135],{},"NoPadding 不增加也不移除字节，因此 UTF-8 明文字节数必须是 16 的倍数，密文字节数也必须是 16 的倍数。",[14,137,138],{},"NoPadding 不提供错误密钥检测。某些错误参数可能仍产生一段字节结果，因此调用方不能把“成功输出”当作认证通过。",[10,140,141],{"id":141},"模式选择",[143,144,145,163],"table",{},[146,147,148],"thead",{},[149,150,151,155,157,160],"tr",{},[152,153,154],"th",{},"模式",[152,156,79],{},[152,158,159],{},"重复分组结构",[152,161,162],{},"建议",[164,165,166,181],"tbody",{},[149,167,168,172,175,178],{},[169,170,171],"td",{},"CBC",[169,173,174],{},"16 字节",[169,176,177],{},"隐藏",[169,179,180],{},"默认使用，但需要额外 MAC 检测篡改",[149,182,183,186,189,192],{},[169,184,185],{},"ECB",[169,187,188],{},"不使用",[169,190,191],{},"暴露",[169,193,194],{},"仅用于标准向量或兼容明确要求的旧系统",[14,196,197],{},"CBC 和 ECB 都不提供消息认证。生产协议应使用独立 MAC，或者采用已经定义认证机制的安全协议。",[10,199,200],{"id":200},"常见问题",[70,202,204],{"id":203},"为什么-sm4-只能使用-16-字节密钥","为什么 SM4 只能使用 16 字节密钥？",[14,206,207],{},"SM4 标准固定使用 128 位密钥，不提供类似 AES-192 或 AES-256 的其他密钥长度。",[70,209,211],{"id":210},"为什么-nopadding-加密中文容易报长度错误","为什么 NoPadding 加密中文容易报长度错误？",[14,213,214],{},"页面按 UTF-8 字节数检查分组，不按 JavaScript 字符数检查。中文和 Emoji 通常占多个 UTF-8 字节。",[70,216,218],{"id":217},"cbc-的-iv-可以复用吗","CBC 的 IV 可以复用吗？",[14,220,221],{},"同一密钥下不应复用 IV 加密不同消息。本工具生成随机 IV，但不会自动把 IV 封装进密文，需要自行一并保存。",[70,223,225],{"id":224},"为什么修改密文后有时仍能解密","为什么修改密文后有时仍能解密？",[14,227,228],{},"CBC 和 ECB 没有认证能力，不能可靠检测篡改。PKCS7 或 UTF-8 校验只能发现部分错误，不能代替 MAC。",[70,230,232],{"id":231},"密钥和内容会上传吗","密钥和内容会上传吗？",[14,234,235],{},"不会。随机参数生成、加密、解密和复制都在当前浏览器中完成。",{"title":237,"searchDepth":238,"depth":238,"links":239},"",2,[240,241,242,243,249,253,254],{"id":12,"depth":238,"text":12},{"id":19,"depth":238,"text":19},{"id":35,"depth":238,"text":35},{"id":68,"depth":238,"text":68,"children":244},[245,247,248],{"id":72,"depth":246,"text":72},3,{"id":78,"depth":246,"text":79},{"id":98,"depth":246,"text":98},{"id":118,"depth":238,"text":118,"children":250},[251,252],{"id":121,"depth":246,"text":122},{"id":131,"depth":246,"text":132},{"id":141,"depth":238,"text":141},{"id":200,"depth":238,"text":200,"children":255},[256,257,258,259,260],{"id":203,"depth":246,"text":204},{"id":210,"depth":246,"text":211},{"id":217,"depth":246,"text":218},{"id":224,"depth":246,"text":225},{"id":231,"depth":246,"text":232},"crypto","sm4-raw-v1","面向国密系统使用 SM4-CBC 或 SM4-ECB 加解密文本，并与 Hex、Base64 密文接口联调。","md",true,"i-lucide-lock-keyhole",[268,269,270,271,122,132,272,273,274],"SM4 加密","SM4 解密","SM4-CBC","SM4-ECB","国密算法","Hex 密文","Base64 密文",{},"\u002Ftools\u002Fsm4-encryption",{"title":5,"description":263},"SM4 加解密工具 - CBC、ECB、PKCS7 与 Hex\u002FBase64","sm4-encryption","published","tools\u002Fsm4-encryption","2026-07-25",[284,285,286],"一般保持默认 CBC + PKCS7；只有接口明确要求时才使用 ECB 或 NoPadding","点击“生成密钥和 IV”后，请把 16 字节 Hex 密钥、IV 和密文一起保存","解密前确认密文编码是 Hex 还是 Base64，选择错误会导致失败或错误结果","E4QXpywYpWh7lsDN9-qksWKPf6BQRNpJX9Bo_rWoHDo",[289,305,317,329,343,355,367,379,391,403,416,427,438,440,452,466,478,489],{"slug":290,"title":291,"description":292,"status":280,"icon":293,"keywords":294,"featured":265},"asymmetric-encryption","RSA 非对称加解密工具","使用 RSA 公钥加密、私钥解密短文本；支持常见 PEM、JWK、X.509 公钥和旧系统兼容参数。","i-lucide-key-round",[295,296,297,298,299,300,301,302,303,304],"RSA 加密","RSA 解密","RSA-OAEP","PKCS1Padding","OAEPWithSHA-256AndMGF1Padding","RSA 密钥生成","PEM 密钥","RSA JWK","PKCS#1 密钥","X.509 证书",{"slug":306,"title":307,"description":308,"status":280,"icon":309,"keywords":310,"featured":265},"base58-converter","Base58 编解码工具","在线使用 Bitcoin Base58 编解码 UTF-8 文本或 Hex 字节，并以文本、Hex 或二进制文件查看解码结果。","i-lucide-binary",[311,312,313,314,315,316],"Base58 编解码","Base58 编码","Base58 解码","Bitcoin Base58","Hex 转 Base58","Base58 在线工具",{"slug":318,"title":319,"description":320,"status":280,"icon":321,"keywords":322,"featured":265},"base64-converter","Base64 编解码工具","在线转换标准 Base64 与 Base64URL，支持 UTF-8 文本、Hex 字节、文件编码及二进制解码下载。","i-lucide-file-key-2",[323,324,325,326,327,328],"Base64 编解码","Base64URL","文件转 Base64","Hex 转 Base64","Base64 解码","Base64 在线工具",{"slug":330,"title":331,"description":332,"status":280,"icon":333,"keywords":334,"featured":265},"chacha20-poly1305","ChaCha20-Poly1305 加解密工具","使用 ChaCha20 或 XChaCha20-Poly1305 安全加解密文本，适合现代 AEAD 或对接 RFC 8439 的场景。","i-lucide-shield-check",[335,336,337,338,339,340,341,342],"ChaCha20-Poly1305","XChaCha20-Poly1305","ChaCha20 加密","Poly1305","RFC 8439","AEAD","AAD","PBKDF2",{"slug":344,"title":345,"description":346,"status":280,"icon":347,"keywords":348,"featured":265},"hex-converter","Hex 编解码工具","在线转换 UTF-8 文本与十六进制字节，支持大小写、0x 前缀以及空格或冒号分隔格式。","i-lucide-hash",[349,350,351,352,353,354],"Hex 编解码","十六进制编码","十六进制解码","文本转 Hex","0x Hex","Hex 在线工具",{"slug":356,"title":357,"description":358,"status":280,"icon":359,"keywords":360,"featured":265},"hybrid-encryption","RSA + AES 混合加解密工具","使用接收方 RSA 公钥加密较长文本：RSA 包装随机 AES-256 密钥，正文由 AES-GCM 保护。","i-lucide-package-check",[361,362,297,363,364,365,366],"混合加密","RSA AES","AES-256-GCM","数字信封","会话密钥","Hybrid Encryption",{"slug":368,"title":369,"description":370,"status":280,"icon":371,"keywords":372,"featured":265},"json-formatter","JSON 格式化与校验工具","在线校验、格式化和压缩 JSON 数据，支持 JSONC 单行与块注释，可准确定位格式错误，内容仅在浏览器本地处理。","i-lucide-braces",[373,374,375,376,377,378],"JSON 格式化","JSON 校验","JSON 压缩","JSONC","JSON 在线工具","JSON 注释",{"slug":380,"title":381,"description":382,"status":280,"icon":383,"keywords":384,"featured":265},"md5-generator","MD5 哈希工具","在线计算文本或文件的 MD5 摘要，支持十六进制大小写和 Base64 输出，内容仅在浏览器本地处理。","i-lucide-fingerprint",[385,386,387,388,389,390],"MD5 工具","MD5 哈希","文件 MD5","MD5 Base64","文本 MD5","MD5 摘要",{"slug":392,"title":393,"description":394,"status":280,"icon":395,"keywords":396,"featured":265},"qr-code","二维码生成与识别工具","在线生成二维码并下载 PNG 或 SVG，也可上传图片识别二维码内容；文本和图片只在浏览器本地处理。","i-lucide-qr-code",[397,398,399,400,401,402],"二维码生成","二维码识别","二维码解析","QR Code","在线二维码工具","二维码图片",{"slug":404,"title":405,"description":406,"status":280,"icon":321,"keywords":407,"featured":265},"rsa-key-converter","RSA 密钥格式转换与解析工具","识别 RSA 密钥或证书的实际格式，在 PEM、DER、JWK 之间转换，并用指纹核对是否为同一公钥。",[408,409,410,411,412,413,414,415],"RSA 密钥转换","PEM 转 JWK","JWK 转 PEM","PKCS#1 转 PKCS#8","SPKI 公钥","DER 解析","X.509 证书解析","RSA 指纹",{"slug":417,"title":418,"description":419,"status":280,"icon":333,"keywords":420,"featured":265},"sha256-generator","SHA-256 哈希工具","在线计算文本或文件的 SHA-256 摘要，支持十六进制大小写和 Base64 输出，内容仅在浏览器本地处理。",[421,422,423,424,425,426],"SHA-256 工具","SHA256 哈希","文件 SHA256","SHA256 Base64","文本 SHA256","SHA-256 摘要",{"slug":428,"title":429,"description":430,"status":280,"icon":293,"keywords":431,"featured":265},"sm2-encryption","SM2 公钥加解密工具","面向国密公钥加密生成 SM2 密钥对并处理文本，支持常见 C1C3C2 与旧式 C1C2C3 排列。",[432,433,434,435,272,436,437,273],"SM2 加密","SM2 解密","C1C3C2","C1C2C3","SM2 密钥生成","压缩公钥",{"slug":279,"title":5,"description":263,"status":280,"icon":266,"keywords":439,"featured":265},[268,269,270,271,122,132,272,273,274],{"slug":441,"title":442,"description":443,"status":280,"icon":444,"keywords":445,"featured":265},"social-insurance","五险一金计算器","按城市、逐月工资、个人缴费基数和专项附加扣除，估算个人五险一金、累计预扣个税与税后收入。","i-lucide-calculator",[446,447,448,449,450,451],"五险一金","社保计算","公积金计算","缴费基数","税后工资","个税计算",{"slug":453,"title":454,"description":455,"status":280,"icon":266,"keywords":456,"featured":265},"symmetric-encryption","AES 对称加解密工具","使用共享密钥或口令加解密文本；默认采用 AES-256-GCM，并保留 CBC、CTR、CFB、ECB 等兼容模式。",[457,458,459,460,461,462,463,342,464,465],"AES 加密","AES 解密","AES-GCM","AES-CBC","AES-ECB","PKCS7Padding","ZeroPadding","AES AAD","AES 原始参数",{"slug":467,"title":468,"description":469,"status":280,"icon":470,"keywords":471,"featured":265},"timestamp-converter","时间戳转换工具","在线完成 Unix 时间戳与日期时间互转，自动识别秒或毫秒，支持 IANA 时区和多行批量转换。","i-lucide-clock-3",[472,473,474,475,476,477],"时间戳转换","Unix 时间戳","timestamp","日期转时间戳","时间戳转日期","毫秒时间戳",{"slug":479,"title":480,"description":481,"status":280,"icon":309,"keywords":482,"featured":265},"unicode-converter","Unicode 转换工具","在线将中文、Emoji 等普通文本转换为 \\uXXXX Unicode 转义，或把 Unicode 转义还原为可读文本，内容仅在浏览器本地处理。",[483,484,485,486,487,488],"Unicode 转换","Unicode 转中文","中文转 Unicode","Unicode 编码","Unicode 解码","Unicode 在线工具",{"slug":490,"title":491,"description":492,"status":280,"icon":493,"keywords":494,"featured":265},"yaml-json-converter","YAML 校验与 JSON 互转工具","在线校验 YAML 或 JSON 格式，并在 YAML 与标准 JSON 之间双向转换，可定位常见语法错误，内容仅在浏览器本地处理。","i-lucide-file-json-2",[495,496,497,498,499,500],"YAML 校验","YAML 转 JSON","JSON 转 YAML","YAML JSON 互转","YAML 在线工具","YAML 格式检查",1784957143881]