@crh-fe/crh-crypto-ctrl
v1.2.12
Published
国密算法前端加密库,提供 SM2、SM4 等国密算法的加密解密功能。
Readme
crhsecuritycontrol
国密算法前端加密库,提供 SM2、SM4 等国密算法的加密解密功能。
目录
项目简介
crhsecuritycontrol 是一个基于国密算法的前端加密库,封装了 SM2 非对称加密和 SM4 对称加密算法,提供简单易用的 API 接口,适用于前后端数据传输加密场景。
功能特性
- SM2 加密解密:基于国密 SM2 算法的非对称加密
- SM4 加密解密:基于国密 SM4 算法的对称加密(支持 ECB 模式)
- 动态 SM4 加密:支持 v1/v2 版本的动态密钥加密,兼容时间戳混淆
- 对象数据加密:支持 JSON 对象数据的加密解密
- MD5 签名:集成 MD5 哈希算法用于数据签名
- Webpack 打包:支持 UMD 模块格式,兼容浏览器和 Node.js 环境
安装
npm install crhsecuritycontrol快速开始
import {
encryptData,
encryptObjectData,
getDecryptData,
decryptData,
encryptSM4,
decryptSM4,
DynamicSm4Base
} from 'crhsecuritycontrol'
// SM2 加密字符串
const encrypted = encryptData('需要加密的数据')
// SM2 加密对象
const encryptedObj = encryptObjectData({ key: 'value' })
// SM4 加密
const sm4Result = encryptSM4({ data: 'test' }, 'token', '/api/url')
// SM4 解密
const decrypted = decryptSM4('加密的密文')API 文档
SM2 加密解密
encryptData(data)
加密字符串数据。
参数:
data(String) - 需要加密的明文数据
返回值:
- (String) - 加密后的密文,格式为
04+ SM2 密文
示例:
const encrypted = encryptData('Hello World')
console.log(encrypted) // 04...密文encryptObjectData(data)
加密对象数据。
参数:
data(Object) - 需要加密的对象
返回值:
- (Object) - 包含
signature属性的对象,值为加密后的密文
示例:
const encrypted = encryptObjectData({ username: 'admin', password: '123456' })
console.log(encrypted) // { signature: '04...密文' }getDecryptData(encryptData)
获取解密后的数据。
参数:
encryptData(Object) - 包含signature属性的加密对象
返回值:
- (Object) - 解密后的原始对象
示例:
const decrypted = getDecryptData({ signature: '04...密文' })
console.log(decrypted) // 原始对象decryptData(encryptData)
解密数据。
参数:
encryptData(Object) - 包含signature属性的加密对象
返回值:
- (String) - 解密后的字符串
示例:
const decrypted = decryptData({ signature: '04...密文' })
console.log(decrypted) // 解密后的字符串SM4 加密解密
encryptSM4(obj, token, url, closeDecrypt)
SM4 加密方法,返回签名和密文。
参数:
obj(Object) - 需要加密的对象token(String) - 登录密钥/令牌url(String) - 请求地址closeDecrypt(Boolean, 可选) - 是否关闭调试日志,默认false
返回值:
- (Object) - 包含以下属性的对象:
cpesignature(String) - SM4 加密后的 MD5 签名ciphertextbody(String) - SM4 加密的密文
示例:
const result = encryptSM4(
{ id: 1, name: 'test' },
'user-token-123',
'/api/user/info'
)
console.log(result)
// {
// cpesignature: '加密签名',
// ciphertextbody: '加密密文'
// }decryptSM4(text, closeDecrypt)
SM4 解密方法。
参数:
text(String) - 需要解密的密文closeDecrypt(Boolean, 可选) - 是否关闭调试日志,默认false
返回值:
- (String) - 解密后的明文
示例:
const decrypted = decryptSM4('加密的密文')
console.log(decrypted) // 解密后的明文动态 SM4 加密
DynamicSm4Base
动态 SM4 加密类,支持 v1 和 v2 版本的加密算法。
构造函数:
new DynamicSm4Base(key, version, timeStamp)参数:
key(String) - 十六进制格式的密钥version(String, 可选) - 版本号,'v1'或'v2',默认'v1'timeStamp(Number) - 时间戳(毫秒)
方法:
encryptSM4(obj, token, url, closeDecrypt)
根据版本自动选择 v1 或 v2 加密方法。
示例:
const dynamicSm4 = new DynamicSm4Base('abcdef1234567890', 'v2', Date.now())
const result = dynamicSm4.encryptSM4(
{ data: 'test' },
'token',
'/api/endpoint'
)decryptSM4(text, closeDecrypt)
根据版本自动选择 v1 或 v2 解密方法。
示例:
const decrypted = dynamicSm4.decryptSM4('加密密文')encryptSM4V2(obj, token, url, closeDecrypt)
v2 版本的加密方法,使用时间戳混淆密钥。
decryptSM4V2(text, closeDecrypt)
v2 版本的解密方法。
项目结构
cpe-products-securitycontrol/
├── utils/
│ ├── gm-crypt/ # 国密算法实现(SM4)
│ │ ├── src/
│ │ │ ├── crypt.js # 加密基础类
│ │ │ └── sm4.js # SM4 算法实现
│ │ ├── index.js # gm-crypt 入口
│ │ └── package.json
│ ├── smCrypto.js # SM2 加密解密工具
│ ├── sm4Crypoto.js # SM4 加密解密工具
│ └── dynamic.js # 动态 SM4 加密类
├── index.js # 主入口文件
├── webpack.config.js # Webpack 构建配置
├── .babelrc # Babel 配置
├── package.json # 项目依赖配置
└── README.md # 项目文档构建与开发
环境要求
- Node.js >= 14.0.0
- npm >= 6.0.0
安装依赖
npm install构建项目
npm run build构建后的文件将输出到 dist/ 目录,采用 UMD 模块格式,支持浏览器和 Node.js 环境。
构建配置说明
- Webpack 5:模块打包工具
- Babel:JavaScript 编译器,支持 ES6+ 语法转换
- TerserPlugin:代码压缩和混淆
- 目标浏览器:支持 Chrome 49+,不支持 IE 11
依赖说明
生产依赖
| 依赖包 | 版本 | 说明 | |--------|------|------| | sm-crypto | ^0.3.11 | 国密 SM2/SM3/SM4 算法库 | | gm-crypt | ^0.0.2 | 国密加密算法实现 | | js-md5 | ^0.8.3 | MD5 哈希算法 | | buffer | ^6.0.3 | Node.js Buffer 的浏览器实现 |
开发依赖
| 依赖包 | 版本 | 说明 | |--------|------|------| | @babel/core | ^7.26.0 | Babel 核心库 | | @babel/preset-env | ^7.26.0 | Babel 预设环境 | | @babel/plugin-transform-runtime | ^7.25.9 | Babel 运行时转换 | | babel-loader | ^9.2.1 | Webpack Babel 加载器 | | webpack | ^5.97.1 | 模块打包工具 | | webpack-cli | ^6.0.1 | Webpack 命令行工具 | | terser-webpack-plugin | ^5.3.11 | 代码压缩插件 |
npm 升级指南
查看当前 npm 版本
npm -v升级 npm
Windows 系统
方法一:使用 npm 自身升级(推荐)
npm install -g npm方法二:指定版本升级
npm install -g npm@latest方法三:使用 npm-windows-upgrade 工具
- 以管理员身份打开 PowerShell
- 执行以下命令:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
npm install -g npm-windows-upgrade
npm-windows-upgrademacOS/Linux 系统
方法一:使用 npm 自身升级
sudo npm install -g npm方法二:使用 n 版本管理器
sudo npm install -g n
sudo n latest方法三:使用 nvm(Node Version Manager)
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载终端配置
source ~/.bashrc # 或 source ~/.zshrc
# 安装最新 Node.js(包含最新 npm)
nvm install node升级项目依赖
查看所有可更新的包
npm outdated更新单个包
npm install <package-name>@latest更新所有依赖到最新版本
npm update使用 npm-check-updates 工具(推荐)
- 安装工具:
npm install -g npm-check-updates- 查看可更新的包:
ncu- 更新 package.json 中的版本号:
ncu -u- 安装更新后的依赖:
npm install清理 npm 缓存
如果遇到安装问题,可以尝试清理缓存:
npm cache clean --force常见问题
Q: 升级后出现权限问题?
A: Windows 系统请以管理员身份运行命令行;macOS/Linux 使用 sudo。
Q: 升级后 npm 命令不可用?
A: 检查环境变量配置,确保 npm 全局安装路径已添加到 PATH 中。
Q: 如何回退到旧版本?
A: 使用以下命令安装指定版本:
npm install -g npm@<version>例如回退到 8.x 版本:
npm install -g npm@8版本兼容性建议
| Node.js 版本 | 推荐 npm 版本 | |--------------|---------------| | 14.x | 6.x - 8.x | | 16.x | 7.x - 8.x | | 18.x | 8.x - 9.x | | 20.x | 9.x - 10.x | | 22.x | 10.x+ |
许可证
ISC
- 补丁版自动 + 1 + 自动发布(最常用) bash 运行 npm version patch && npm publish --access public
- 次版本自动 + 1 + 自动发布 bash 运行 npm version minor && npm publish --access public
- 主版本自动 + 1 + 自动发布 bash 运行 npm version major && npm publish --access public
