npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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 工具

  1. 以管理员身份打开 PowerShell
  2. 执行以下命令:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
npm install -g npm-windows-upgrade
npm-windows-upgrade

macOS/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 工具(推荐)

  1. 安装工具:
npm install -g npm-check-updates
  1. 查看可更新的包:
ncu
  1. 更新 package.json 中的版本号:
ncu -u
  1. 安装更新后的依赖:
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. 补丁版自动 + 1 + 自动发布(最常用) bash 运行 npm version patch && npm publish --access public
  2. 次版本自动 + 1 + 自动发布 bash 运行 npm version minor && npm publish --access public
  3. 主版本自动 + 1 + 自动发布 bash 运行 npm version major && npm publish --access public