国密SM4解密
函数名:sm4解密 / sm4_decrypt
功能描述
SM4 解密函数。基于国密 SM4 对称加密算法对密文进行解密,支持 ECB / CBC 两种模式、四种填充方式,可解析 Base64 或 Hex 格式的密文,还原原始明文。
会员等级:🟢 免费版(Free)
语法
excel
=sm4_decrypt(密文, 密钥(Hex或Base64)[, IV (32字符Hex或Base64),ECB模式可空), 模式(1=ECB 2=CBC), 填充(1=None 2=PKCS7 3=Zeros 4=ISO10126), 输入格式 (0=Base64 1=Hex)])参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 密文 | String | 是 | — | 待解密的 Base64 / Hex 字符串 |
| 密钥(Hex或Base64) | String | 是 | — | Hex 或 Base64 格式的 16 字节密钥 |
| IV (32字符Hex或Base64),ECB模式可空) | String | 否 | null | 16 字节 IV(32 字符 Hex 或 Base64,ECB 模式可空) |
| 模式(1=ECB 2=CBC) | Int | 否 | 2 | 1=ECB,2=CBC(默认) |
| 填充(1=None 2=PKCS7 3=Zeros 4=ISO10126) | Int | 否 | 2 | 1=None,2=PKCS7(默认),3=Zeros,4=ISO10126 |
| 输入格式 (0=Base64 1=Hex) | Int | 否 | 0 | 0=Base64(默认),1=Hex |
返回值
String - 解密后的明文(UTF-8 字符串),并自动去除末尾的空字符(TrimEnd('\0'))。
使用示例
默认 CBC + PKCS7 + Base64 解密
公式:
excel
=sm4_decrypt("ifg5C3wJlfTgJaYjYFMSPA==","12345678901234567890123456789012","98765432109876549876543210987654")结果:
测试明文ECB + Zeros + Hex 解密
公式:
excel
=sm4_decrypt("6130c118837884920adf12ec16891c2e","12345678901234567890123456789012","",1,3,1)结果:
测试明文技术说明
- 算法:采用国密 SM4 对称解密算法,密钥固定为 16 字节(128 位)。
- 密钥 / IV 解析(
ParseCryptoParam):长度为 32 且全为十六进制字符时按 Hex 解析,否则按 Base64 解析;解析后须为 16 字节。 - 模式说明:
mode=1(ECB)不需要 IV;mode=2(CBC,默认)必须提供 16 字节 IV。 - 密文输入:
inputFormat=1时按 Hex 解析密文,默认(0)按 Base64 解析。 - 解密结果统一以 UTF-8 解码为字符串,并通过
TrimEnd('\0')去除 Zeros 等填充可能遗留的尾部空字符。 - 与
sm4加密配套使用时,模式、填充、密钥、IV 须保持一致。
错误处理
| 错误场景 | 返回值 |
|---|---|
| 密文或密钥为空 | #VALUE! |
| 密钥解析后长度非 16 字节 | #VALUE! |
| CBC 模式下 IV 为空 | #VALUE! |
| IV 解析后长度非 16 字节 | #VALUE! |
| 密文格式解析失败(非法 Base64 / Hex) | #VALUE! |
| 解密过程异常 | #VALUE! |