国密SM4加密
函数名:sm4加密 / sm4_encrypt
功能描述
SM4 加密函数。基于国密 SM4 对称加密算法对明文文本进行加密,支持 ECB / CBC 两种模式、四种填充方式,可输出 Base64 或 Hex 格式的密文。
会员等级:🟢 免费版(Free)
语法
excel
=sm4_encrypt(明文, 密钥(32字符Hex或Base64)[, IV(32字符Hex或Base64,ECB模式可空), 模式1=ECB,2=CBC, 填充(1=None 2=PKCS7 3=Zeros 4=ISO10126), 输出格式(0=Base64 1=Hex)])参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 明文 | String | 是 | — | 待加密的文本 |
| 密钥(32字符Hex或Base64) | String | 是 | — | 16 字节密钥(32 字符 Hex 或 Base64) |
| 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 - 加密后的密文字符串。输出格式 为 1 时返回小写十六进制字符串;默认(0)返回 Base64 字符串。
使用示例
默认 CBC + PKCS7 + Base64 加密
公式:
excel
=sm4_encrypt("测试明文","12345678901234567890123456789012","98765432109876549876543210987654")结果:
ifg5C3wJlfTgJaYjYFMSPA==ECB + Zeros + Hex 加密
公式:
excel
=sm4_encrypt("测试明文","12345678901234567890123456789012","",1,3,1)结果:
6130c118837884920adf12ec16891c2e技术说明
- 算法:采用国密 SM4 对称加密算法,密钥固定为 16 字节(128 位)。
- 明文统一使用 UTF-8 编码转换为字节后加密。
- 密钥 / IV 解析(
ParseCryptoParam):当字符串长度为 32 且全为十六进制字符时,按 Hex 解析;否则尝试按 Base64 解析。解析后长度必须为 16 字节,否则返回错误。 - 模式说明:
mode=1(ECB)不需要 IV;mode=2(CBC,默认)必须提供 16 字节 IV。 - 填充:1=None,2=PKCS7(默认),3=Zeros,4=ISO10126。
- 输出:
outputFormat=1时输出小写十六进制;默认(0)输出 Base64。 - 可与
sm4解密配合使用完成加解密闭环。
错误处理
| 错误场景 | 返回值 |
|---|---|
| 明文或密钥为空 | #VALUE! |
| 密钥解析后长度非 16 字节 | #VALUE! |
| 密钥既非 32 位 Hex 也非有效 Base64 | #VALUE! |
| CBC 模式下 IV 为空 | #VALUE! |
| IV 解析后长度非 16 字节 | #VALUE! |
| 加密过程异常 | #VALUE! |