国密 SM4 加解密 JavaScript 实现,支持浏览器与 Node.js 环境。
- ✅ 高性能:基于
Uint32Array和位运算优化,100万次加密仅需 ~1.5s - ✅ 现代化:使用 ES6+ 语法,支持
TextEncoder/TextDecoder原生编解码 - ✅ 模式支持:完整支持 ECB 和 CBC 加解密模式
- ✅ 零依赖:除必要的
base64-js外无其他外部依赖 - ✅ 跨平台:支持 ESM、CommonJS、UMD 多种模块格式,包含 TypeScript 类型定义
100万次加解密耗时 (3字符明文):
加密100w耗时: ~1.5s
解密100w耗时: ~1.8s
npm install jssm4import JSSM4 from 'jssm4';
const sKey = "qawsedrftgyhujik"; // 16字节密钥
const sm4 = new JSSM4(sKey);
// 加密
const encrypted = sm4.encryptData_ECB("Hello SM4");
console.log(encrypted);
// 解密
const decrypted = sm4.decryptData_ECB(encrypted);
console.log(decrypted); // Hello SM4import JSSM4 from 'jssm4';
const sKey = "qawsedrftgyhujik"; // 16字节密钥
const sIv = "1234567890123456"; // 16字节向量
const sm4 = new JSSM4(sKey);
// 加密
const encrypted = sm4.encryptData_CBC("Hello CBC", sIv);
// 解密
const decrypted = sm4.decryptData_CBC(encrypted, sIv);
console.log(decrypted); // Hello CBC创建 SM4 实例
- key: 16 字符长度的密钥字符串(UTF-8 编码应为 16 字节)
ECB 模式加解密
CBC 模式加解密
- iv: 16 字符长度的初始化向量字符串
# 安装依赖
npm install
# 构建
npm run build
# 测试
npm test- Node.js: >= 20.0.0 (利用
TextEncoder和现代位运算优化) - Browser: 现代浏览器 (支持
Uint32Array和TextEncoder)
| 格式 | 文件 | 用途 |
|---|---|---|
| ESM | lib/jssm4.esm.js |
现代打包工具(Vite、Webpack 等) |
| CommonJS | lib/jssm4.cjs.js |
Node.js require() |
| UMD | lib/jssm4.js |
浏览器 <script> 标签 |