Need help with sm-crypto?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

wechat-miniprogram
243 Stars 52 Forks MIT License 26 Commits 3 Opened issues

Description

miniprogram sm crypto library

Services available

!
?

Need anything else?

Contributors list

# 33,939
JavaScr...
Less
12 commits
# 575,236
JavaScr...
1 commit

sm-crypto

小程序 js 库。国密算法 sm2、sm3 和 sm4 的实现。

使用此组件需要依赖小程序基础库 2.2.1 以上版本,同时依赖开发者工具的 npm 构建。具体详情可查阅官方 npm 文档

安装

npm install --save miniprogram-sm-crypto

sm2

获取密钥对

const sm2 = require('miniprogram-sm-crypto').sm2

let keypair = sm2.generateKeyPairHex()

publicKey = keypair.publicKey // 公钥 privateKey = keypair.privateKey // 私钥

加密解密

const sm2 = require('miniprogram-sm-crypto').sm2
const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1

let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode) // 加密结果 let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果

签名验签

ps:理论上来说,只做纯签名是最快的。

const sm2 = require('miniprogram-sm-crypto').sm2

// 纯签名 + 生成椭圆曲线点 let sigValueHex = sm2.doSignature(msg, privateKey) // 签名 let verifyResult = sm2.doVerifySignature(msg, sigValueHex, publicKey) // 验签结果

// 纯签名 let sigValueHex2 = sm2.doSignature(msg, privateKey, { pointPool: [sm2.getPoint(), sm2.getPoint(), sm2.getPoint(), sm2.getPoint()], // 传入事先已生成好的椭圆曲线点,可加快签名速度 }) // 签名 let verifyResult2 = sm2.doVerifySignature(msg, sigValueHex2, publicKey) // 验签结果

// 纯签名 + 生成椭圆曲线点 + der编解码 let sigValueHex3 = sm2.doSignature(msg, privateKey, { der: true, }) // 签名 let verifyResult3 = sm2.doVerifySignature(msg, sigValueHex3, publicKey, { der: true, }) // 验签结果

// 纯签名 + 生成椭圆曲线点 + sm3杂凑 let sigValueHex4 = sm2.doSignature(msg, privateKey, { hash: true, }) // 签名 let verifyResult4 = sm2.doVerifySignature(msg, sigValueHex4, publicKey, { hash: true, }) // 验签结果

// 纯签名 + 生成椭圆曲线点 + sm3杂凑(不做公钥推导) let sigValueHex5 = sm2.doSignature(msg, privateKey, { hash: true, publicKey, // 传入公钥的话,可以去掉sm3杂凑中推导公钥的过程,速度会比纯签名 + 生成椭圆曲线点 + sm3杂凑快 }) let verifyResult5 = sm2.doVerifySignature(msg, sigValueHex5, publicKey, { hash: true, publicKey, })

// 纯签名 + 生成椭圆曲线点 + sm3杂凑 + 不做公钥推 + 添加 userId(长度小于 8192) // 默认 userId 值为 1234567812345678 let sigValueHex6 = sm2.doSignature(msgString, privateKey, { hash: true, publicKey, userId: 'testUserId', }) let verifyResult6 = sm2.doVerifySignature(msgString, sigValueHex6, publicKey, { hash: true, userId: 'testUserId', })

获取椭圆曲线点

const sm2 = require('miniprogram-sm-crypto').sm2

let poin = sm2.getPoint() // 获取一个椭圆曲线点,可在sm2签名时传入

sm3

const sm3 = require('miniprogram-sm-crypto').sm3

let hashData = sm3('abc') // 杂凑

sm4

加密

const sm4 = require('miniprogram-sm-crypto').sm4
const msg = 'hello world! 我是 juneandgreen.' // 可以为 utf8 串或字节数组
const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特

let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#5 填充 let encryptData = sm4.encrypt(msg, key, {padding: 'none'}) // 加密,不使用 padding let encryptData = sm4.encrypt(msg, key, {padding: 'none', output: 'array'}) // 加密,不使用 padding,输出为字节数组

解密

const sm4 = require('miniprogram-sm-crypto').sm4
const encryptData = '0e395deb10f6e8a17e17823e1fd9bd98a1bff1df508b5b8a1efb79ec633d1bb129432ac1b74972dbe97bab04f024e89c' // 可以为 16 进制串或字节数组
const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特

let decryptData = sm4.decrypt(encryptData, key) // 解密,默认输出 utf8 字符串,默认使用 pkcs#5 填充 let decryptData = sm4.decrypt(encryptData, key, {padding: 'none'}) // 解密,不使用 padding let decryptData = sm4.decrypt(encryptData, key, {padding: 'none', output: 'array'}) // 解密,不使用 padding,输出为字节数组

协议

MIT

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.