aipy-sm4-toolkit
v0.1.1
Published
国密 SM4 加密算法前端实现(支持 ECB/CBC/CTR 模式)
Readme
aipy-sm4-toolkit
国密 SM4 加密算法前端实现(支持 ECB/CBC/CTR 模式)
安装
npm install aipy-sm4-toolkit特性
- ✅ 纯 JavaScript 实现,无依赖
- ✅ 支持 ECB/CBC/CTR 三种加密模式
- ✅ 浏览器/Node.js 双端兼容
- ✅ TypeScript 类型声明
使用示例
ECB 模式
import { encryptECB, decryptECB } from 'aipy-sm4-toolkit';
// 16字节密钥(必选)
const key = new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10]);
// 加密
const plaintext = "Hello, SM4!";
const ciphertext = encryptECB(plaintext, key); // Base64 字符串
// 解密
const decrypted = decryptECB(ciphertext, key); // "Hello, SM4!"CBC 模式
import { encryptCBC, decryptCBC } from 'aipy-sm4-toolkit';
// 16字节密钥 + 16字节IV(必选)
const key = new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10]);
const iv = new Uint8Array([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]);
const ciphertext = encryptCBC("国密测试", key, iv);
const decrypted = decryptCBC(ciphertext, key, iv);CTR 模式
import { encryptCTR } from 'aipy-sm4-toolkit';
// 16字节密钥 + 12字节Nonce(必选)
const key = new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10]);
const nonce = new Uint8Array([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b]);
const ciphertext = encryptCTR("流式加密", key, nonce);API 文档
| 函数名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| encryptECB(plaintext, key) | ECB模式加密 | plaintext: 明文字符串key: 16字节Uint8Array密钥 | Base64密文 |
| decryptECB(ciphertext, key) | ECB模式解密 | ciphertext: Base64密文key: 16字节Uint8Array密钥 | 明文字符串 |
| encryptCBC(plaintext, key, iv) | CBC模式加密 | iv: 16字节Uint8Array初始向量 | Base64密文 |
| decryptCBC(ciphertext, key, iv) | CBC模式解密 | - | 明文字符串 |
| encryptCTR(plaintext, key, nonce) | CTR模式加密 | nonce: 12字节Uint8Array随机数 | Base64密文 |
注意事项
- 密钥/IV/Nonce 必须为
Uint8Array类型,长度固定(密钥16字节,IV16字节,Nonce12字节) - 加密结果为 Base64 字符串,解密时需传入相同格式
- 生产环境建议使用 CBC/CTR 模式(ECB模式安全性较低)
许可证
MIT
