sm4_encrypt函数
函数名:sm4_encrypt / sm4_encrypt
函数功能
使用 SM4 国密分组加密算法 对明文进行加密,支持 ECB 与 CBC 两种模式,提供多种填充方式(None、PKCS7、Zeros、ISO10126)以及 Base64 / Hex 输出格式选择,满足多种安全通信和数据保护需求。
参数规范
| 参数名 | 类型 | 必填 | 示例 | 特殊说明 |
|---|---|---|---|---|
plaintext | String | 是 | "HelloWorld" | 待加密的明文字符串 |
key | String | 是 | "00112233445566778899AABBCCDDEEFF" | 16字节密钥,32位Hex或Base64编码 |
iv | String | 否 | "AABBCCDDEEFF00112233445566778899" | 16字节IV,32位Hex或Base64编码;仅CBC模式必填 |
mode | Number | 否 | 2 | 加密模式:1 = ECB,2 = CBC(默认) |
padding | Number | 否 | 2 | 填充方式:1=None,2=PKCS7(默认),3=Zeros,4=ISO10126 |
outputFormat | Number | 否 | 0 | 输出格式:0=Base64(默认),1=Hex |
使用案例
ECB模式(Base64输出,默认填充)
问题描述:快速使用ECB模式加密字符串,并以Base64格式输出 公式演示:
excel
=sm4_encrypt("HelloWorld","00112233445566778899AABBCCDDEEFF",,1)输出效果(示例):
text
eIO/DW3U2E9qnPGtpXnGOw==ECB模式(Hex输出,无填充)
问题描述:使用ECB模式输出十六进制密文,且不使用填充 公式演示:
excel
=sm4_encrypt("1234567890ABCDEF","00112233445566778899AABBCCDDEEFF",,1,1,1)输出效果(示例):
text
443187e5c421e7578c84fa392fc3b360CBC模式(Base64输出,PKCS7填充)
问题描述:使用CBC模式加密,指定IV,并返回Base64格式密文 公式演示:
excel
=sm4_encrypt("DataSecurity","00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,2,0)输出效果(示例):
text
MLKiBbASc285j/Me53LOXg==CBC模式(Hex输出,Zeros填充)
问题描述:使用Zeros填充,并返回十六进制密文 公式演示:
excel
=sm4_encrypt("SensitiveInfo","00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,3,1)输出效果(示例):
text
16d7ebb06092e75d21ea942557c0e245不同填充方式对比
问题描述:验证相同明文在不同填充下加密结果的差异 公式演示:
excel
=sm4_encrypt("TestData","00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,2,0)
=sm4_encrypt("TestData","00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,3,0)
=sm4_encrypt("TestData","00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,4,0)输出效果(示例):
text
PKCS7: OpRkiWblJ47ic6Jpa5Saqw==
Zeros: zDrN/D8Ulo9S2dW0ubWhFw==
ISO10126: MZ+GvhZTrq2fMkTiO0YnZA==技术说明
加密模式
- ECB:每个分组独立加密,速度快,但安全性较低
- CBC:每个分组依赖前一个分组的密文,更安全,需提供IV
填充方式
- None:明文需为分组长度(16字节)的倍数
- PKCS7(默认):最常用的标准填充方式
- Zeros:用
0x00填充到分组长度 - ISO10126:随机字节填充,最后一字节表示填充长度
输出格式
- Base64:便于在文本和传输协议中使用
- Hex:可读性强,适合调试和日志记录
异常处理
| 错误场景 | 返回值 |
|---|---|
| 明文为空 | #VALUE! |
| 密钥无效(非16字节) | #VALUE! |
| CBC模式缺少IV | #VALUE! |
| IV无效(非16字节) | #VALUE! |
| 运算异常 | #VALUE! |
扩展应用
数据库存储安全
excel
=sm4_encrypt(A1,"00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899")可将敏感字段加密后存储,防止直接读取泄露。
网络传输加密
excel
=sm4_encrypt(CONCATENATE("UserID","Timestamp","Nonce"),"00112233445566778899AABBCCDDEEFF","AABBCCDDEEFF00112233445566778899",2,2,1)将多参数拼接后加密,提高数据传输安全性。
注:本函数在 WPS 2019+ 和 Excel 365 中测试通过