Skip to content

sm4_encrypt函数

函数名:sm4_encrypt / sm4_encrypt

函数功能

使用 SM4 国密分组加密算法 对明文进行加密,支持 ECBCBC 两种模式,提供多种填充方式(None、PKCS7、Zeros、ISO10126)以及 Base64 / Hex 输出格式选择,满足多种安全通信和数据保护需求。

参数规范

参数名类型必填示例特殊说明
plaintextString"HelloWorld"待加密的明文字符串
keyString"00112233445566778899AABBCCDDEEFF"16字节密钥,32位Hex或Base64编码
ivString"AABBCCDDEEFF00112233445566778899"16字节IV,32位Hex或Base64编码;仅CBC模式必填
modeNumber2加密模式:1 = ECB,2 = CBC(默认)
paddingNumber2填充方式:1=None,2=PKCS7(默认),3=Zeros,4=ISO10126
outputFormatNumber0输出格式: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
443187e5c421e7578c84fa392fc3b360

CBC模式(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 中测试通过