Skip to content

国密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)String16 字节密钥(32 字符 Hex 或 Base64)
IV(32字符Hex或Base64,ECB模式可空)Stringnull16 字节 IV(32 字符 Hex 或 Base64,ECB 模式可空)
模式1=ECB,2=CBCInt21=ECB,2=CBC(默认)
填充(1=None 2=PKCS7 3=Zeros 4=ISO10126)Int21=None,2=PKCS7(默认),3=Zeros,4=ISO10126
输出格式(0=Base64 1=Hex)Int00=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!

基于源代码最新版本文档