sm-crypto
小程序 js 库。国密算法 sm2、sm3 和 sm4 的实现。
使用此组件需要依赖小程序基础库 2.2.1 以上版本,同时依赖开发者工具的 npm 构建。具体详情可查阅官方 npm 文档。
安装
npm install --save miniprogram-sm-crypto
sm2
获取密钥对
const sm2 = sm2 let keypair = sm2 publicKey = keypairpublicKey // 公钥privateKey = keypairprivateKey // 私钥
加密解密
const sm2 = sm2const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1 let encryptData = sm2 // 加密结果let decryptData = sm2 // 解密结果
签名验签
ps:理论上来说,只做纯签名是最快的。
const sm2 = sm2 // 纯签名 + 生成椭圆曲线点let sigValueHex = sm2 // 签名let verifyResult = sm2 // 验签结果 // 纯签名let sigValueHex2 = sm2 // 签名let verifyResult2 = sm2 // 验签结果 // 纯签名 + 生成椭圆曲线点 + der编解码let sigValueHex3 = sm2 // 签名let verifyResult3 = sm2 // 验签结果 // 纯签名 + 生成椭圆曲线点 + sm3杂凑let sigValueHex4 = sm2 // 签名let verifyResult4 = sm2 // 验签结果 // 纯签名 + 生成椭圆曲线点 + sm3杂凑(不做公钥推导)let sigValueHex5 = sm2let verifyResult5 = sm2 // 纯签名 + 生成椭圆曲线点 + sm3杂凑 + 不做公钥推 + 添加 userId(长度小于 8192)// 默认 userId 值为 1234567812345678let sigValueHex6 = sm2let verifyResult6 = sm2
获取椭圆曲线点
const sm2 = sm2 let poin = sm2 // 获取一个椭圆曲线点,可在sm2签名时传入
sm3
const sm3 = sm3 let hashData = // 杂凑
sm4
加密
const sm4 = sm4const msg = 'hello world! 我是 juneandgreen.' // 可以为 utf8 串或字节数组const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特 let encryptData = sm4 // 加密,默认输出 16 进制字符串,默认使用 pkcs#5 填充let encryptData = sm4 // 加密,不使用 paddinglet encryptData = sm4 // 加密,不使用 padding,输出为字节数组
解密
const sm4 = sm4const encryptData = '0e395deb10f6e8a17e17823e1fd9bd98a1bff1df508b5b8a1efb79ec633d1bb129432ac1b74972dbe97bab04f024e89c' // 可以为 16 进制串或字节数组const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特 let decryptData = sm4 // 解密,默认输出 utf8 字符串,默认使用 pkcs#5 填充let decryptData = sm4 // 解密,不使用 paddinglet decryptData = sm4 // 解密,不使用 padding,输出为字节数组
协议
MIT