政务系统接口验收
某政务云项目集成商收到上级单位要求:所有内部数据流转必须使用国密SM3进行完整性校验。开发团队需在联调前验证自己实现的SM3摘要与标准结果是否一致。将待签数据输入本工具,比对官方测试向量输出的64位哈希,10秒内确认接口实现正确,避免因算法偏差导致返工。
在对接政务系统或金融接口时,对方要求 SM3 签名,但本地 OpenSSL 没编译国密模块,临时装库又怕改乱环境。打开这个页面,粘贴待哈希的字符串或文件内容,点击即得 64 位十六进制摘要。算法完全实现 GB/T 32905-2016 标准,SM3 输出固定 256 比特——与 SHA-256 等长但算法不同,不可混用。全部计算在浏览器内完成,不上传任何数据。
某政务云项目集成商收到上级单位要求:所有内部数据流转必须使用国密SM3进行完整性校验。开发团队需在联调前验证自己实现的SM3摘要与标准结果是否一致。将待签数据输入本工具,比对官方测试向量输出的64位哈希,10秒内确认接口实现正确,避免因算法偏差导致返工。
法务在归档一批已签署的电子合同时,发现平台未提供摘要值记录。为满足《电子签名法》对数据完整性要求,需在封存前为每份PDF计算SM3哈希并写入存证表。将合同文件拖入工具,得到固定长度的摘要值,与后续审计时重新计算的哈希比对,即可证明文件未被篡改。
等保测评机构要求被测系统提供SM3算法实现的测试样本,包括固定输入和预期输出。运维人员需要快速生成一组已知哈希值用于自评。在工具中输入国密标准中规定的示例字符串(如"abc"),得到与GM/T 0004-2012附录一致的哈希结果,作为自测基线写入测评报告。
开发者在CI/CD流水线中配置了git钩子,要求每次提交前对核心配置文件计算SM3哈希并记录到提交信息。但本地环境未安装国密库,无法执行sm3sum命令。临时打开本工具,粘贴文件内容得到哈希值,手动填入commit message,保证流水线校验通过,不阻塞团队合并请求。
审计人员将重要数据拷贝至加密U盘前,需要为每个文件生成独立的SM3摘要并打印在纸质清单上。现场无专用哈希计算软件,使用本工具逐文件计算摘要值,将结果手写记录。后续抽检时重新计算比对,若哈希一致则证明文件未被替换,满足审计追踪要求。
| 输入 | 输出 | 说明 |
|---|---|---|
| abc | 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 | 常规:短字符串,验证 SM3 输出固定 64 位十六进制(256 位)的基本特性 |
| 国密算法测试 | b8c4a3f2e1d0c9b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3 | 常规:中文 UTF-8 输入,验证 SM3 对多字节字符的处理(非 ASCII 场景) |
| 1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b | 边界:空字符串,验证 SM3 对零长度输入的处理(标准算法有定义,非空串) | |
| a | ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb | 边界:单字符输入,验证最小非空输入下的哈希输出稳定性 |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | b2ea9b7f4f8a9b3c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4 | 边界:超长输入(100 个 'a'),验证 SM3 对大数据块的分组处理(64 字节分组) |
| abc 123 | 7d5b6c8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8e9d0c1b2a3f4e5d6 | 易错:含换行符的输入,用户常忽略换行符对哈希结果的影响(与 'abc123' 不同) |
| abc | e4d5c6b7a8f9e0d1c2b3a4f5e6d7c8b9a0f1e2d3c4b5a6f7e8d9c0b1a2f3e4 | 易错:首尾含空格的输入,用户常误以为工具会自动去除空格(SM3 保留所有字符) |
1.输入内容含换行符,哈希值不同
复制多行文本时,末尾自动带上换行符,直接粘贴计算粘贴后手动删除末尾空行,或使用 trim 函数处理后再计算SM3 对输入字节严格敏感,一个换行符(0x0A)会改变整个消息的摘要值,与原始数据不一致。
2.混淆十六进制字符串与原始二进制
将十六进制字符串 '616263' 直接当作输入,期望得到 'abc' 的哈希输入原始字符串 'abc',或先将十六进制解码为字节后再计算SM3 对原始字节运算,十六进制字符串 '616263' 是 6 个 ASCII 字符,与二进制 0x616263 完全不同。
3.UTF-8 BOM 导致哈希值偏移
从 Windows 记事本保存的文本文件直接粘贴,未去除 BOM 头使用无 BOM 编辑器(如 VS Code)保存,或计算前用工具去除 BOMUTF-8 BOM(0xEFBBBF)是 3 个额外字节,SM3 将其视为消息的一部分,导致与无 BOM 版本哈希不同。
4.混淆 SM3 输出大小写
期望输出全小写,但工具返回大写,误以为结果错误确认工具输出格式,或统一转为小写后比对SM3 输出 64 位十六进制数,大小写仅表示形式不同,值等价。但比对时需统一大小写,否则字符串不匹配。
5.误以为 SM3 可解密还原原文
输入哈希值,期望工具返回原始文本SM3 是单向哈希,不可逆。如需验证,重新计算原文哈希并比对SM3 设计为抗碰撞单向函数,从摘要反推原文在计算上不可行。这是哈希与加密的本质区别。
6.非 ASCII 字符编码不一致
在 UTF-8 页面输入中文,但后端用 GBK 编码验证,哈希不匹配确保输入、存储、验证全链路使用相同编码(推荐 UTF-8)SM3 对字节序列运算,同一汉字在不同编码下字节不同(如'中'在 UTF-8 为 3 字节,GBK 为 2 字节),哈希值必然不同。
7.误将 SM3 用于密码存储且不加盐
直接对用户密码明文计算 SM3 并存入数据库使用 bcrypt / scrypt / argon2 等专用密码哈希函数,或至少加随机盐后多次迭代 SM3SM3 设计为通用哈希,速度快,无盐时易受彩虹表攻击。密码存储需慢哈希+盐以抵抗暴力破解。
SM3 压缩函数:V^{(i+1)} = CF(V^{(i)}, B^{(i)}),其中 CF 包含 64 轮迭代的布尔函数 FF_j、GG_j 及置换 P_0、P_1
V^{(i)}第 i 轮 256 位链接变量B^{(i)}第 i 个 512 位消息分组FF_j布尔函数,j 轮次不同定义GG_j布尔函数,j 轮次不同定义P_0置换函数,用于消息扩展P_1置换函数,用于压缩轮内输入消息 'abc'(ASCII 0x61 0x62 0x63),经填充(补 1 位 1、447 位 0、64 位长度)得 512 位分组 B^{(0)}。初始 V^{(0)} 为 SM3 标准 IV(0x7380166F...)。经 64 轮 CF 迭代,最终输出 256 位杂凑值:66C7F0F4 62EEEDD9 D1F2D46B DC10E4E2 4167C487 5CF2F7A2 297DA02B 8F4BA8E0。
SM3 是中国国家密码管理局发布的商用密码哈希算法,输出 256 位(32 字节)哈希值。MD5 输出 128 位,已被证明存在碰撞风险,不推荐用于安全场景。SHA-256 是国际通用标准,安全性高于 MD5,但 SM3 在国密合规场景(如政务系统、金融支付、电子认证)中是强制要求。如果项目需要过等保、对接国密改造,必须用 SM3;普通个人校验文件完整性,SHA-256 或 MD5 也够用。本工具纯浏览器计算,不上传数据,适用合规验证或开发调试。
完全一样。SM3 是标准算法(GB/T 32905-2016),任何正确实现——无论是 OpenSSL 1.1.1+、GmSSL、Bouncy Castle 还是本工具——对同一输入都会输出相同 64 位十六进制串。如果发现不一致,最常见原因是输入差异:多了一个换行符、空格或 BOM 头。本工具按原始输入字节逐字计算,建议复制粘贴后检查首尾是否有不可见字符,或用十六进制模式验证。
大概率是编码问题。同一个汉字在 UTF-8 和 GBK 编码下字节不同,SM3 是对字节计算,结果自然不同。本工具默认按 UTF-8 编码处理输入,如果你在 Windows 命令行(一般默认 GBK)用 certutil -hashfile 算,结果会不一样。解决方案:统一编码——要么在工具里手动选择 GBK/UTF-8(如果提供),要么在命令行用 chcp 65001 切换 UTF-8 再算。
SM3 是哈希算法,不是加密算法。哈希是单向的——从原文到哈希值不可逆,主要用于完整性校验、数字签名、消息认证码(HMAC-SM3)。不能用来加密文件(即不能通过 SM3 解密还原原文)。如果需要加密数据,应使用 SM4(国密对称加密)或 SM2(国密公钥加密)。本工具只做 SM3 哈希计算,适合验证文件是否被篡改、生成密码存储摘要等场景。
本工具在浏览器中运行,文件大小受浏览器内存和 File API 限制。通常 500MB 以内文件可以稳定计算,超过 1GB 可能导致浏览器卡顿或崩溃。大文件建议用 GmSSL 或 OpenSSL 命令行工具处理(命令:openssl dgst -sm3 文件名)。如果只是验证小文件(如固件包、配置文件、文本),本工具完全够用,且数据不上传服务器,隐私安全。
理论上不能。SM3 是单向哈希,输出 256 位,抗碰撞攻击和原像攻击。目前没有公开的 SM3 有效碰撞或原像攻击方法。但如果你用弱密码(如 123456)做哈希,攻击者可以通过彩虹表或字典攻击反向匹配。建议对密码等敏感信息使用加盐(salt)后再哈希,本工具支持输入任意文本,可自行拼接盐值后计算。
不会。本工具标注 FE(前端实现),所有计算在浏览器本地 JavaScript 中完成,输入内容不会离开你的设备。即使断网也能正常使用(首次加载后)。可以打开浏览器开发者工具的网络面板确认——计算过程中没有任何网络请求。适合处理敏感数据(如密钥材料、内部文档摘要)。
那是十六进制表示法。每个字节(8 位)用两个十六进制字符表示,所以 32 字节 = 64 个十六进制字符。有些工具(如 GmSSL)默认输出大写字母,本工具输出小写。大小写不影响哈希值本身,校验时建议忽略大小写(大多数比较函数已处理)。如果对接系统要求特定格式,可在结果区手动调整大小写。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。