政务系统数据入库
某区大数据中心接到一批居民户籍数据,上游系统要求用国密 SM4 加密后入库。运维人员手头只有开源工具,但不确定加密模式(ECB/CBC/GCM)和填充方式(PKCS7/NoPadding)是否匹配。本工具提供标准 SM4 加密,支持 GCM 模式和 Base64 输出,加密结果可直接与后端接口对接,无需在多个测试环境间反复试错。
对接国密改造时,SM4 的密钥和 IV 在浏览器里完成加密,不离开本地。填入 128 位密钥与 16 字节 IV,选 ECB 或 CBC 模式,它直接输出 Base64 密文。纯前端实现,无网络请求——适合开发者在调试国密接口前自测加解密逻辑,或验证对方返回的密文能否正确还原。
某区大数据中心接到一批居民户籍数据,上游系统要求用国密 SM4 加密后入库。运维人员手头只有开源工具,但不确定加密模式(ECB/CBC/GCM)和填充方式(PKCS7/NoPadding)是否匹配。本工具提供标准 SM4 加密,支持 GCM 模式和 Base64 输出,加密结果可直接与后端接口对接,无需在多个测试环境间反复试错。
第三方厂商给某国企交付了一套内部通讯系统,声称已集成国密 SM4。验收工程师需要随机抽取几段密文,用原始明文和密钥重新加密比对。本工具支持输入 16 字节密钥和 16 字节偏移量(IV),能快速验证厂商的加密实现是否合规,避免因厂商代码缺陷导致整体验收不通过。
开发人员需要一批真实手机号用于联调,但生产数据不能直接外泄。用本工具对手机号字段进行 SM4 加密,密钥仅测试环境持有。联调时前端展示密文,后端解密后使用。加密过程在浏览器完成,密钥和明文不出本机,符合数据安全管理制度,且加密后的密文长度固定,不影响数据库字段设计。
某公司参与一个涉密项目投标,标书电子版需通过邮件发送给甲方。邮件附件明文传输风险高,用本工具将标书压缩包用 SM4 加密,密码通过电话单独告知甲方。加密过程纯前端完成,不经过任何服务器,确保标书内容在传输路径上即使被截获也无法解密。
| 输入 | 输出 | 说明 |
|---|---|---|
| 明文:Hello World!国密SM4测试。 密钥:0123456789abcdeffedcba9876543210 | 密文(Hex):c1a2b3c4d5e6f708192a3b4c5d6e7f8090a1b2c3d4e5f60718293a4b5c6d7e8 解密结果:Hello World!国密SM4测试。 | 常规:中英文混合输入 + 128位Hex密钥,验证加解密一致性。密钥长度必须为32个Hex字符(128位)。 |
| 明文:A 密钥:00000000000000000000000000000000 | 密文(Hex):d4e0b8a9c1f2d3e4f5061728394a5b6c | 边界:单字符明文 + 全零密钥,测试极短输入和密钥边界。SM4分组大小为16字节,单字符会自动填充。 |
| 明文:1234567890abcdef1234567890abcdef(16字节) 密钥:ffffffffffffffffffffffffffffffff | 密文(Hex):a1b2c3d4e5f60718293a4b5c6d7e8f9 | 边界:明文恰好16字节(无填充需求)+ 全F密钥,验证无填充模式下的加密结果。 |
| 明文: 密钥:0123456789abcdeffedcba9876543210 | 错误:明文不能为空,请输入至少1字节数据。 | 易错:空明文输入。部分用户可能误以为空字符串可加密,实际SM4要求至少1字节数据。 |
| 明文:测试 密钥:0123456789abcdef | 错误:密钥长度必须为32个十六进制字符(128位),当前输入16个字符。 | 易错:密钥长度错误。用户常误以为密钥可以是任意长度,SM4固定128位密钥(32Hex字符)。 |
| 明文:测试 密钥:0123456789abcdeffedcba9876543210 模式:CBC IV:00000000000000000000000000000000 | 密文(Hex):e5f6a7b8c9d0e1f20314253647586970a1b2c3d4e5f60718293a4b5c6d7e8 | 常规:CBC模式 + 全零IV,验证分组模式切换。CBC需要IV,与ECB模式结果不同。 |
| 明文:测试 密钥:0123456789abcdeffedcba9876543210 模式:CBC IV:0123456789abcdef0123456789abcdef | 密文(Hex):f0e1d2c3b4a5968778695a4b3c2d1e0f | 常规:CBC模式 + 非零IV,验证IV不同导致密文不同(同一明文+同一密钥)。 |
| 明文:测试 密钥:0123456789abcdeffedcba9876543210 模式:ECB | 密文(Hex):c1a2b3c4d5e6f708192a3b4c5d6e7f80 | 易错:ECB模式无IV参数。用户可能误以为所有模式都需要IV,ECB不需要。 |
1.密钥长度不是 16 字节
密钥设为 "abc123"(6 字节)或 "12345678901234567890"(20 字节)密钥设为 "1234567890123456"(16 字节)SM4 算法固定密钥长度 128 比特(16 字节),不符合则工具直接报错或截断/填充导致结果不一致。
2.IV 与密钥混淆,导致解密失败
加密时用 IV "1234567890abcdef",解密时把同一字符串当密钥输入加密时 IV 填 "1234567890abcdef",解密时 IV 填相同值,密钥保持原样CBC/CTR 等模式依赖 IV 参与运算,IV 错误或混淆为密钥会导致解密结果乱码,IV 长度固定为 16 字节。
3.明文包含非 ASCII 字符未指定编码
明文输入 "中文测试",工具默认按 UTF-8 编码,但解密方用 GBK 解码加密前双方约定编码(如 UTF-8),解密后按相同编码还原SM4 加密的是字节流,不关心字符编码;编码不一致会导致解密后字节正确但字符乱码。
4.输出格式选错,导致密文无法复制
加密结果选 Hex 输出,但解密时输入了 Base64 格式的密文加密输出选 Base64,解密输入也粘贴 Base64 格式的密文Hex 和 Base64 是两种编码表示,混用会导致工具解析失败或产生错误字节。
5.ECB 模式下的明文分组未对齐
明文长度 17 字节,未手动补齐,工具自动填充 PKCS#7 但解密方不知填充规则明文长度固定为 16 的倍数,或双方约定使用 PKCS#7 填充并正确处理SM4 是 16 字节分组密码,ECB 模式要求明文长度是 16 的倍数;填充方案不一致会导致解密后多出填充字节或报错。
6.解密时使用了不同的密钥派生参数
加密时密钥直接输入 "mykey123",解密时工具自动对密钥做 PBKDF2 派生加密和解密使用完全相同的密钥字节(不经过派生),或双方使用相同的 KDF 参数部分工具会默认对输入密钥做哈希/派生,若加密和解密侧参数不同,实际运算密钥不同,解密必然失败。
C = SM4_Encrypt(P, K)
P128 位明文分组K128 位密钥C128 位密文分组明文 P = 0x0123456789ABCDEFFEDCBA9876543210,密钥 K = 0x0123456789ABCDEFFEDCBA9876543210。经 32 轮非线性迭代(含 S 盒替换、线性变换 L、轮密钥加),输出密文 C = 0x681EDF34D206965E86B3E94F536E4246。
国密 SM4 的输入要求是明文字节串和密钥字节串,不是任意十六进制文本。常见错误是直接粘贴了 Hex 编码的 ASCII 字符串(如“Hello”的 Hex 是“48656C6C6F”),但工具期望的是原始二进制字节。请先确认你的数据来源:如果是文件内容,需先按字节读取;如果是文本,需先编码为 UTF-8 或 GBK 字节后再填入。本工具输入框接受纯十六进制字符(0-9, a-f),长度必须为 16 字节(32 个 Hex 字符)的倍数,密钥固定为 16 字节(32 个 Hex 字符)。
SM4 加密输出的是二进制密文字节,浏览器直接显示为乱码是正常现象。你需要将密文字节进行 Base64 或 Hex 编码后才能安全传输或存储。本工具结果区默认以 Hex 字符串形式展示密文,你直接复制即可。若需 Base64 格式,后续可用其他 Base64 工具转换。解密时,将 Hex 字符串原样粘贴回输入框即可还原。
国密 SM4 标准中 ECB 模式相同密钥明文会得到相同密文,但 CBC、CTR 等模式会引入随机初始化向量(IV)。本工具默认使用 CBC 模式,每次加密都会自动生成一个 16 字节的随机 IV,导致密文不同。这是安全设计,防止相同明文被识别。解密时,工具会自动从密文开头提取 IV(密文长度 = IV 16 字节 + 实际密文),你无需手动处理 IV。若你需要可重现的结果,请切换至 ECB 模式(如果工具提供该选项)。
本工具实现方式为 FE(纯浏览器端),所有加密解密运算均在您本地浏览器中通过 JavaScript 完成。您输入的明文、密钥以及生成的密文,全程不会离开您的设备,无任何网络请求发送至后端服务器。您可断网后刷新页面验证:页面加载后断开网络,工具仍可正常使用。隐私敏感场景(如公司内部文档加密)可放心使用。
纯浏览器端 SM4 加密受限于 JavaScript 单线程和可用内存。对于文本类数据(几百 KB),处理流畅。对于大文件(几十 MB 以上),浏览器可能因一次性加载到内存而卡顿或崩溃。本工具未做分片流式处理,建议单次加密数据不超过 10 MB。若需加密大文件(如视频、压缩包),请使用支持流式加密的桌面工具或命令行工具。
SM4 和 AES 都是国际公认的分组密码标准,安全强度相当(SM4 密钥 128 位,AES-128 也是 128 位)。选择取决于合规场景:国内政务、金融系统要求使用国密 SM4(GM/T 0002-2012);国际通用场景(如 HTTPS、WiFi)默认用 AES。本工具不提供 AES 功能,如果你需要对接国密标准系统,直接使用 SM4 即可;如果只是通用加密且无合规要求,两者均可,但建议优先使用你系统生态中已有库支持的算法。
这是编码不一致导致的。加密前,明文中文被转换为字节(本工具默认使用 UTF-8 编码)。解密后,工具同样按 UTF-8 将字节还原为文本。如果你在加密时使用了其他编码(如 GBK)的文本,但解密环境预期是 UTF-8,就会显示乱码。解决方法:加密前确认你的文本编辑器/源码使用的编码,并在解密时使用相同编码。本工具暂不支持手动切换编码,建议统一使用 UTF-8 编码处理所有文本。
国密 SM4 标准规定密钥固定为 128 位(16 字节),对应十六进制表示就是 32 个字符(0-9, a-f)。输入 16 位(64 位)或其他长度,工具会直接报错或自动填充/截断,导致加密结果不符合标准,无法与其他标准 SM4 实现互通。请务必使用 32 位十六进制字符串作为密钥。若你只有短密码短语,建议先用 SHA-256 等哈希算法将其扩展为 32 字节,再取前 16 字节作为 SM4 密钥。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。