tq-sm-crypto

0.0.3 • Public • Published

tq-sm-crypto

安装

npm install --save tq-sm-crypto

sm2

加密解密

import { sm2 } from 'tq-sm-crypto'
const cipherMode = 0 // 1 - C1C3C2,0 - C1C2C3,默认为0
const msgString = 'greedy'
const publicKey = '04d82b0d2412f53c1ef37ff583802906deb5a6b77c63f0ad7f52bd40434394379dafca978b80ce939d6318a41867639fb0ff2c1dec74ffcd85d6fd37929d3301da'
const encryptData = '04f6b413d42fac02c2f8575e6501ce6be6419c62feb91054973ffa20c4422edd15985ac04910182c4968e38ec2e15b67228a4d211beb3fbfa035b521badbf9d08a65e1aea837a41962426bd05aa6d08d47242eaad2e74a781dc211639652f16c9f132840e6cfb4b7e17762725f'

const privateKey = '1f26a0ef95db82d7b98bd6ca4445f44a853d8681a89bd2a171434de2eda0afbb'

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

签名验签

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

import { sm2 } from 'tq-sm-crypto'

// 纯签名 + 生成椭圆曲线点
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',
})

获取椭圆曲线点

import { sm2 } from 'tq-sm-crypto'

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

sm3

import { sm3 } from 'tq-sm-crypto'

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

sm4

加密

import { sm4 } from 'tq-sm-crypto'
const msg = 'hello world! 我是 greedy.' // 可以为 utf8 串或字节数组
const key = '37ae640dc70047b3ab176f4f7bf39454' // 可以为 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,输出为字节数组
let encryptData = sm4.encrypt(msg, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 加密,cbc 模式

解密

import { sm4 } from 'tq-sm-crypto'
const encryptData = 'bffede5ea11200d49b85f6a6767bedd5' // 可以为 16 进制串或字节数组
const key = '37ae640dc70047b3ab176f4f7bf39454' // 可以为 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,输出为字节数组
let decryptData = sm4.decrypt(encryptData, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 解密,cbc 模式

Readme

Keywords

Package Sidebar

Install

npm i tq-sm-crypto

Weekly Downloads

5

Version

0.0.3

License

MIT

Unpacked Size

74.3 kB

Total Files

19

Last publish

Collaborators

  • greedy3154