国密算法 SM2 nodejs 版本

原创 精帖 国密算法sm2node.js

简介

Node.js 版本的国密算法 SM2 实现,一共提供3个接口。

  1. /keypair/generate:生成私钥和公钥对
  2. /encrypt/sm2:使用公钥加密字符串
  3. /decrypt/sm2:使用私钥解密加密字符串

服务使用

进入主模块 sm2-express-server.js 所在的根目录,使用 npm install 安装所需依赖模块。

安装好后,使用 node sm2-express-server.js 启动服务。根目录提供了两个版本的启动脚本,在 windows 下可以直接双击 startup.bat 来启动,如果是 linux,可以执行 startup.sh 来启动服务。

本代码服务依赖 nodejs,如果你对 nodejs 不熟悉,或者没有安装 nodejs,可以参考 Node.js 安装环境和简单实用教程 来安装使用。

当然你也可以自己改造代码。

接口演示

这里演示使用国密算法加解密字符串 https://www.daimafans.com 代码饭

服务启动后默认 IP 为 127.0.0.1,端口为 9118,接口均为 POST 请求。

/keypair/generate:生成私钥和公钥对

首先获取私钥和公钥对,请求地址为 http://127.0.0.1:9118/keypair/generate

ZMPDUxnsNY9TjfhmS3iz_sm2_keypair_generate.jpg

公钥和私钥对以 json 形式的数据返回:

{
    "privateKey":"b7e918ebdf51c72d43956d8696108f38b763b701b41a731a1c4826d5cf166513",
    "publicKey":"04eed637fd5f171002aa5dbc29075c7d0373294294063bcce322a6501e0c17382696ed442b2882901182ce8a3975a9b20b3ec5119f10b1d42843a4c5fad658b33b"
}

/encrypt/sm2:使用公钥加密字符串

使用刚刚生成的公钥字符串 04eed637fd5f171002aa5dbc29075c7d0373294294063bcce322a6501e0c17382696ed442b2882901182ce8a3975a9b20b3ec5119f10b1d42843a4c5fad658b33b 来加密字符串 https://www.daimafans.com 代码饭

使用 Postman 新建 POST 请求 http://127.0.0.1:9118/encrypt/sm2,在 Body 项中选择 raw, 数据类型选择 JSON(application/json),数据填写:

{
    "key":"04eed637fd5f171002aa5dbc29075c7d0373294294063bcce322a6501e0c17382696ed442b2882901182ce8a3975a9b20b3ec5119f10b1d42843a4c5fad658b33b",
    "data":"https://www.daimafans.com 代码饭"
}

key 为公钥,data 为将要加密的字符串,点击 Send 发送请求。

Hu5nwxrDQeWSVZiLyC4f_sm2_encrypt_sm2.jpg

得到加密串 04d57c3142717c2173d74cfe6d8befd2dbe23b463053026d91aaf5febe91b9002893618db7c921fe4b5a7fc2edd4f26177aeb3ce4e6abd310fef75c73de76a18ffa0fd47130df2952f4c9085fed4cba44858c93ca02832ffb2c87c64c8f82da73ebd23a773ae99b0535643fb681ec44449127ac660ae66879e47cc5f3024fbd6775fe6ca

/decrypt/sm2:使用私钥解密加密字符串

请求解密接口验证加密结果,使用 Postman 新建 POST 请求 http://127.0.0.1:9118/decrypt/sm2,在 Body 项中选择 raw, 数据类型选择 JSON(application/json),数据填写:

{
    "key":"b7e918ebdf51c72d43956d8696108f38b763b701b41a731a1c4826d5cf166513",
    "data":"04d57c3142717c2173d74cfe6d8befd2dbe23b463053026d91aaf5febe91b9002893618db7c921fe4b5a7fc2edd4f26177aeb3ce4e6abd310fef75c73de76a18ffa0fd47130df2952f4c9085fed4cba44858c93ca02832ffb2c87c64c8f82da73ebd23a773ae99b0535643fb681ec44449127ac660ae66879e47cc5f3024fbd6775fe6ca"
}

key 为私钥,data 为刚刚加密后的加密字符串,点击 Send 发送请求。

fRsBSVxPTcovhiqYH0XF_sm2_decrypt_sm2.jpg

可以看到返回的字符串为 https://www.daimafans.com 代码饭,正是我们加密的字符串,结果正确。

文件名:sgcc-nodejs-sm2-server.zip,文件大小:217.00 KB
  • /sgcc-nodejs-sm2-server/
    • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server
      • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/startup.bat
      • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/lib
        • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/lib/sm2.js
        • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/lib/SM2.min.js
        • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/sm2-express-server.js
        • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules
          • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-sign
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esparse.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/escodegen
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-verify
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-verify.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esgenerate
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/escodegen.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/acorn.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esgenerate.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/mime.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-conv.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esvalidate.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/uuid
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/acorn
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/uuid.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-conv
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esvalidate
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/mime
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/sshpk-sign.cmd
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/node_modules/.bin/esparse
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/startup.sh
            • /sgcc-nodejs-sm2-server/sgcc-nodejs-sm2-server/package.json
如果觉得这对你有用,请随意赞赏,给与作者支持
评论 3
最新评论
#1 楼 bokecn 2021-10-04

你好怎么下载不了,怎么联系你·

#2 楼 8643 2019-08-26

sqwerqweqw

#3 楼 L丶阿涛 2019-03-04

123