Yakit/Yaklang 国密算法支持详解
2026/6/16 5:11:53 网站建设 项目流程

📌 国密算法速览

在介绍 Yakit 支持之前,先了解国密三大核心算法:

算法

类型

对标国际标准

用途

SM2

非对称(ECC)

RSA

数字签名、密钥交换、身份认证

SM3

哈希摘要

MD5/SHA

数字签名、数据完整性验证

SM4

对称分组加密

DES/AES

数据加解密(分组密码)

说明:SM1 算法不公开,仅以 IP 核形式存在于芯片中,软件层面无法支持;SM9 为标识密码算法(非对称,将用户标识作为公钥)。

🔴 Yaklang/CDSL 对国密算法的支持情况

算法

支持程度

说明

SM3

✅ 完全支持

hash 模块内置

SM4

✅ 完全支持

多模式加解密(CBC/OFB/CTR/ECB)

SM2

⚠️ 有限支持

社区版 RSA 接口未针对 SM2 优化,功能待完善

SM1

❌ 不支持

算法不公开,软件层无法实现

📦 SM3 使用方法

函数:codec.Sm3(data)

说明:对数据生成 SM3 哈希摘要(输出十六进制字符串)

Yaklang 示例:

data = "Hello, World!" sm3Hash = codec.Sm3(data) dump(sm3Hash) // 输出:9185dda7c380d3d7ac243c9e39d1d56850cfe5f7a3b2509e65c4e82e8c29bf6a


使用场景:

  • 数据完整性校验(替代 MD5/SHA)

  • 密码存储(数据库中存 SM3 摘要而非明文)

  • 消息认证码(MAC)生成

  • 数字签名中的摘要计算

📦 SM4 使用方法

SM4 是 Yaklang 支持最完整的国密算法,支持多种加密模式:

1. SM4-CBC 模式(最常用) key = "0123456789abcdef" // 16字节密钥 iv = "fedcba9876543210" // 16字节初始化向量 plaintext = "Hello, SM4!" // 加密 ciphertext = codec.SM4EncryptCBCWithPKCS7Padding(key, iv, plaintext) // 解密 decrypted = codec.SM4DecryptCBCWithPKCS7Padding(key, iv, ciphertext) 2. SM4-OFB 模式 key = "0123456789abcdef" iv = "fedcba9876543210" ciphertext = codec.SM4EncryptOFBWithPKCSPadding(key, iv, plaintext) decrypted = codec.SM4DecryptOFBWithPKCSPadding(key, iv, ciphertext) 3. SM4-ECB 模式(简单但安全性较低) key = "0123456789abcdef" ciphertext = codec.SM4EncryptECBWithPKCSPadding(key, plaintext) decrypted = codec.SM4DecryptECBWithPKCSPadding(key, ciphertext) 4. SM4-CTR 模式 key = "0123456789abcdef" nonce = "fedcba9876543210" // 12字节nonce ciphertext = codec.SM4EncryptCTRWithPKCSPadding(key, nonce, plaintext) decrypted = codec.SM4DecryptCTRWithPKCSPadding(key, nonce, ciphertext)

SM4 密钥格式注意事项:

  • 密钥长度为 16 字节(128位)

  • Yakit 支持十六进制(Hex)格式密钥

  • CBC/OFB 模式需提供 16 字节 IV

  • CTR 模式需提供 12 字节 Nonce

⚠️ SM2 支持情况

项目

说明

当前状态

社区版功能有限,RSA 接口未针对 SM2 优化

原因

社区版开发优先级考量,暂无强烈硬需求

对标

SM2 对标 RSA(数字签名/密钥交换)

建议

如需完整的 SM2 支持,可通过 Yaklang 编写插件调用底层密码库

💡 如果需要 SM2 加解密/签名验签,可通过 Yaklang 热加载插件扩展,调用 sm-crypto 或 gm-crypto 等 JS 库实现。

🛠️ 在 Yakit GUI 中使用国密

场景一:Web Fuzzer 热加载中使用 SM4

在测试需要 SM4 加密的接口时,通过热加载标签动态生成加密 payload:

// 热加载函数示例 sm4Encrypt = func(p) { key = "0123456789abcdef" iv = "fedcba9876543210" // 对 fuzztag 生成的原始数据加密后发送 return codec.SM4EncryptCBCWithPKCS7Padding(key, iv, p) }

场景二:编解码模块直接使用

在 Yakit 的 Codec(数据处理) 模块中:

  • 选择编解码类型为 SM4

  • 输入密钥和 IV

  • 选择加密模式(CBC/OFB/CTR/ECB)

  • 一键加解密

场景三:CTF / 渗透测试靶场

  • 前端 SM4 加密通信分析

  • 渗透测试中绕过前端加密(如金融类 App)

  • 配合 Web Fuzzer 爆破带国密保护的接口

📊 核心函数汇总

函数

模式

填充

codec.Sm3(data)

codec.SM4EncryptCBCWithPKCS7Padding

CBC

PKCS#7

codec.SM4DecryptCBCWithPKCS7Padding

CBC

PKCS#7

codec.SM4EncryptOFBWithPKCSPadding

OFB

PKCS#7

codec.SM4DecryptOFBWithPKCSPadding

OFB

PKCS#7

codec.SM4EncryptECBWithPKCSPadding

ECB

PKCS#7

codec.SM4DecryptECBWithPKCSPadding

ECB

PKCS#7

codec.SM4EncryptCTRWithPKCSPadding

CTR

PKCS#7

codec.SM4DecryptCTRWithPKCSPadding

CTR

PKCS#7

🎯 典型使用场景

场景

推荐算法

说明

测试国密 HTTPS 通信

SM4

分析 SM4 加密的请求体/响应体

绕过前端 SM4 加密

SM4-CBC/OFB

热加载动态加密 payload

数据完整性校验

SM3

替代 SHA/MD5 验证响应签名

金融/政务系统渗透

SM4 + SM3

国密标准系统测试

CTF 密码学题目

SM4

SM4 加解密类题目

总结:Yaklang 目前对 SM3 和 SM4 支持完整,可直接使用 codec 模块进行加解密和摘要计算;SM2 支持较为有限;SM1 不支持。在实际渗透测试中,SM4 是最常用的国密加解密算法,主要用于测试采用国密标准(金融、政务、移动 App)的通信加密系统。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询