关于这个工具
在线加解密工具把平常要翻命令行才能做的活搬进了浏览器:Base64 / Base32 / Hex 等编码,MD5 到 SHA-512 的摘要,HMAC 签名,AES-256 与 XTEA 对称加密,以及国密 SM2 / SM3 / SM4。选算法、填输入、点一下就能拿到结果。
所有运算都在当前页面里完成。输入的文字、密钥、随机生成的密钥对,一律不发送到任何服务器,也不需要注册或登录。
25 种算法,其实是四种不同的用途
很多人把这几类混在一起用,结果要么把编码当成了加密,要么拿摘要当密码存。按用途分清楚,才知道该选哪一个。
- 编码(Base64 / Base32 / Hex / URL / Binary / Morse / ROT13):可逆、无密钥,只是换个表示法。加密后的密文要放进 URL 或 JSON 时,通常还需再套一层 Base64。
- 摘要(MD5 / SHA-1 / SHA-256 / SHA-384 / SHA-512 / RIPEMD-160 / CRC-32):单向,只能算不能还原。用来校验文件完整性、比对接口签名,不要用它存密码。
- HMAC(HMAC-SHA1 / SHA256 / SHA384 / SHA512):带密钥的摘要,能防篡改也能验证身份。对接支付、开放平台接口时最常见的就是这个。
- 对称加密(AES-256-GCM / AES-256-CBC / XTEA-CBC):用同一把密钥加密和解密。GCM 自带完整性校验,新系统优先选它;CBC 兼容性好,但需要自己配 IV 和填充。
国密算法:SM2 / SM3 / SM4 对应哪些标准
国密算法不是"中国版 AES"这么一句能概括的,三个算法管的完全是三件事,标准号也各自独立:
- SM4(GM/T 0002,对应 GB/T 32907):分组密码,128 位密钥、128 位分组。用来替代 AES 做对称加密。本站支持 CBC 与 ECB 两种模式,填充可选 PKCS#7、零填充或不填充,输出纯十六进制。
- SM3(GM/T 0004,对应 GB/T 32905):密码杂凑算法,输出 256 位摘要,作用等同 SHA-256。摘要不可逆,所以界面上没有"解密 SM3"这个选项。
- SM2(GM/T 0003,使用规范 GM/T 0009):基于 256 位椭圆曲线的公钥算法,公钥加密、私钥解密(也用于签名)。公钥 130 位(04 开头)或 128 位都接受,密文排列可选 C1C3C2(新标准默认)或 C1C2C3(老实现常见)。
密钥由你填,也由你保管
SM4 的密钥和 IV 不做任何推导或补全:你填 32 位十六进制(128 位),它就按这个值算;填错了它会直接报错,而不是悄悄换成别的密钥。这样算出来的密文才能和服务器端、和 openssl 命令行对上。需要一把新密钥时点"随机",页面会在本地生成后填进输入框。
页面不做任何网络请求来传递输入内容。埋点系统只记录"有人打开了加解密工具页、点了加密按钮"这类动作,不记录算法以外的任何输入——密钥、明文、密文都不进日志。
即便如此,公用电脑上用完请清空输入框;私钥、生产环境密钥不要贴进任何网页,包括这一个。
常见问题
- SM4 的密钥为什么必须填 32 位十六进制?
- SM4 是 128 位分组密码,128 位 = 16 字节 = 32 个十六进制字符。IV 同样是 16 字节,也就是 32 个十六进制字符。少一位、多一位或者混进了空格、大写以外的字符都会直接报错,避免拿一把错密钥算出一串看起来正常但解不开的密文。
- SM2 解密失败、结果为空是什么原因?
- 九成是密文排列选错了。新标准是 C1C3C2,很多老系统和 Java 默认库输出 C1C2C3,两边对不上就会解不出来。把下拉框切到另一种再试一次;还不行就检查公钥私钥是不是同一对、公钥有没有漏掉开头的 04。
- 为什么 SM3 和 MD5、SHA 都不能"解密"?
- 它们是摘要算法,设计上就是单向的:任意长度的输入压成固定长度的指纹,过程不可逆。网上所谓"MD5 解密"其实是拿海量字典反查,只对弱口令有效。存密码请用 bcrypt、scrypt 或 Argon2 这类带盐、可调计算量的算法。
- AES-GCM 和 AES-CBC 该选哪个?
- 新系统选 GCM。它在加密的同时生成认证标签,密文被改动一位就会解密失败,不需要额外再算一次 HMAC。CBC 只在需要兼容老接口时用,而且必须自己保证 IV 随机且不重复使用,否则会泄露明文规律。
- 这里算出的结果能和 openssl 命令行对上吗?
- 能。SM4 输出的是纯十六进制密文,可以交给 openssl enc -sm4-cbc 处理,注意密钥和 IV 用 -K / -iv 以十六进制直接传入,不再走口令派生。AES-CBC 同理。SM2 与 openssl 互通时,两边都要确认 C1C3C2 排列。
- Base64 算加密吗?能保护内容吗?
- 不算。Base64 只是把二进制换成 64 个可打印字符,任何人都能一行代码还原,它解决的是"能不能安全传输",不是"能不能被别人看懂"。要保密就用 AES 或 SM4,Base64 只在密文需要塞进 URL、JSON、邮件正文时做最后一层包装。