更新记录
1.0.0(2026-07-19)
首发:国密 SM2/SM3/SM4 全套(27 API)。
- SM2:密钥对/签名验签/公钥加解密(C1C3C2);SM3:哈希·HMAC;SM4:ECB·CBC·CTR + PKCS7
- GM/T·GB/T 官方标准向量锚定,纯本地计算零网络
- App-Android + H5 双端同一核心(内存型 API 全量;文件型仅 App);iOS 原生库随包就绪、适配下版本解锁
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | - | × | × |
nex-gmcrypto —— 国密 SM2 / SM3 / SM4(高性能原生)
🌐 在线演示:https://nexdemo.test.chengaofeng.cn —— 浏览器直接看真实渲染效果(48 组件 H5 门户,无需安装)
自研高性能原生国密核心(SM2 / SM3 / SM4 全内置实现),提供 uni-app 可调的 JS API。支持 App-Android 与 H5 端 (双端同一核心、同真值,见下「H5 端」);iOS:原生库与绑定已随包就绪,适配下版本解锁;小程序不支持。
同一份 utssdk 插件同时支持 uni-app x(uvue) 与 经典 uni-app(vue3),无需分叉。 期望值全部锚定 GM/T 0004-2012 / GB/T 32907-2016 官方黄金向量,绝不自造;无额外系统依赖。
API(12 个)
| 组 | JS API | 签名 | 说明 |
|---|---|---|---|
| SM3 | sm3Hash |
sm3Hash(text): string |
SM3 文本哈希 → 64 hex(不抛错) |
sm3HashFile |
sm3HashFile(path): string |
文件流式哈希 → 64 hex | |
hmacSm3 |
hmacSm3(text, keyHex): string |
HMAC-SM3 → 64 hex | |
| SM4 | sm4Encrypt |
sm4Encrypt(plaintext, keyHex, mode, ivHex): string |
→ base64 密文 |
sm4Decrypt |
sm4Decrypt(ciphertextB64, keyHex, mode, ivHex): string |
base64 → 明文 | |
sm4EncryptFile |
sm4EncryptFile(inPath, outPath, keyHex, mode, ivHex): GmFileResult |
文件加密 | |
sm4DecryptFile |
sm4DecryptFile(inPath, outPath, keyHex, mode, ivHex): GmFileResult |
文件解密 | |
| SM2 | sm2GenerateKeypair |
sm2GenerateKeypair(): Sm2KeyPair |
生成密钥对 |
sm2Sign |
sm2Sign(message, privateKeyHex, userId): string |
签名 → DER hex | |
sm2Verify |
sm2Verify(message, signatureHex, publicKeyHex, userId): boolean |
验签 | |
sm2Encrypt |
sm2Encrypt(plaintext, publicKeyHex): string |
公钥加密 → C1C3C2 hex | |
sm2Decrypt |
sm2Decrypt(ciphertextHex, privateKeyHex): string |
私钥解密 |
验证说明(诚实分层,2026-07-16):内存型 9 API(SM3
sm3Hash/hmacSm3、SM4sm4Encrypt/sm4Decrypt、SM2 全 5 个)已过 Android 设备端端到端实测(GM/T 官方向量 27 断言 ALL PASS)。文件型 3 API(sm3HashFile/sm4EncryptFile/sm4DecryptFile)算法正确性已验证;其unifile://缓存路径的设备端文件读写实测随后续版本补充(同 iOS「下版本解锁」节奏)。
类型
// 文件型操作返回(字段 camelCase)
type GmFileResult = { sizeBytes: number; costMs: number };
// SM2 密钥对(字段 camelCase)
type Sm2KeyPair = { privateKeyHex: string; publicKeyHex: string };
- SM3:哈希/HMAC 输出小写 hex(64 字符 / 32 字节)。
sm3Hash不会失败。 - SM4:
keyHex= 16 字节(32 hex);mode∈"ECB"/"CBC"/"CTR"(大小写不敏感)。ivHex:ECB 传null;CBC / CTR 必填 16 字节 IV(32 hex)。- ECB / CBC 用 PKCS7 填充,CTR 为流(无填充)。密文以 base64 输出。
- ⚠️ SM4 是非认证加密(非 AEAD):解密不校验完整性,密钥错/密文被篡改时 ECB/CBC 多半解填充失败抛错、CTR 则可能得到乱码。需防篡改请用
uni-nex-crypto的 AES-256-GCM。CTR 严禁复用同一 (key, iv)。
- SM2:私钥 64 hex、公钥 128 hex(X||Y,无 04 前缀;验签/加密也接受 04 前缀的 130 hex)。
- 签名为标准 SM2-with-SM3,
userId参与ZA预处理;传null用默认"1234567812345678"。签名与验签必须用相同 userId。 - 公钥加密输出 C1C3C2 密文 hex。
- 签名为标准 SM2-with-SM3,
用法
import {
sm3Hash, hmacSm3,
sm4Encrypt, sm4Decrypt,
sm2GenerateKeypair, sm2Sign, sm2Verify, sm2Encrypt, sm2Decrypt
} from "@/uni_modules/nex-gmcrypto";
// SM3 / HMAC-SM3
const digest = sm3Hash("abc"); // 66c7f0f4...
const mac = hmacSm3("payload", "00112233445566778899aabbccddeeff");
// SM4(key=16 字节/32 hex;CBC 需 16 字节 IV)
const key = "0123456789abcdeffedcba9876543210";
const iv = "00112233445566778899aabbccddeeff";
const ct = sm4Encrypt("机密数据", key, "CBC", iv); // base64
const pt = sm4Decrypt(ct, key, "CBC", iv); // "机密数据"
// ECB 不需 IV:sm4Encrypt("x", key, "ECB", null)
// SM2(密钥对 / 签名验签 / 公钥加解密)
const kp = sm2GenerateKeypair();
const sig = sm2Sign("报文", kp.privateKeyHex, null); // DER hex
const ok = sm2Verify("报文", sig, kp.publicKeyHex, null); // true
const enc = sm2Encrypt("机密", kp.publicKeyHex); // C1C3C2 hex
const dec = sm2Decrypt(enc, kp.privateKeyHex); // "机密"
// 文件:sm3HashFile / sm4EncryptFile / sm4DecryptFile(路径进出,返回 GmFileResult)
H5 端
- H5 端与 App 端由同一自研核心驱动,同算法、同真值(无需额外静态资源部署)。
- 内存型 9 API 全部可用(sm3Hash/hmacSm3/sm4Encrypt/sm4Decrypt/sm2GenerateKeypair/
sm2Sign/sm2Verify/sm2Encrypt/sm2Decrypt);SM2 keygen 随机源走浏览器
crypto.getRandomValues。 - 文件型 3 API H5 不支持(sm3HashFile/sm4EncryptFile/sm4DecryptFile,浏览器无文件系统),调用抛错。
- H5 端引擎初始化是异步的:建议应用启动时(仅 H5 分支)
await ensureReady()一次, 过早调用会抛「尚未就绪」错误。
平台与调试边界
- app-android / app-ios / H5(web);各家小程序不支持。
- Android 本地真机调试原生库需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
- iOS 端原生库含 Swift,宿主原生工程需开启「支持 Swift」。
- 最终 App 打包由 HBuilderX /
@dcloudioCLI 完成。
安全边界(务必阅读)
- 软件级国密:纯软件实现,密钥与明文会出现在进程内存中。越狱 / Root 设备可在运行时注入、Hook、dump 内存读取密钥——软件层无法根除,敏感场景请结合设备风控(可配合 uni-nex-security-shield 做反越狱/反调试)。
- 本插件的 SM2 实现不保证常量时间(constant-time),存在侧信道的理论风险。最高安全保障场景应使用硬件 HSM / 国密安全芯片(SE),本插件不替代硬件密码模块。
- SM4 非认证加密、不防篡改(见上文);密钥/IV 的生成与管理由调用方负责(建议密钥走系统 Keystore/Keychain、CTR 的 IV 每次随机且不复用)。
- 合规:金融/政务等强监管场景的合规性(密评、算法实现认证)需另行评估,本插件仅提供算法能力。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12437781
赞赏 1934
赞赏
京公网安备:11010802035340号