一、环境配置

在之前的node.js库配置中,我们已经配置好了node和npm,再次检查配置情况

node -v
npm -v

npm install --save miniprogram-sm-crypto

二、进入工作目录/usr/local/bin/node_modules/sm-crypto

vim sm2.js
const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();

publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥
const msgString = "20201307lcy"
const cipherMode = 1; // 1 - C1C3C2,0 - C1C2C3,默认为1 const encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode); // 加密结果
console.log("original data:");
console.log(msgString);
console.log("encrypted data:");
console.log(encryptData);
const decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode); // 解密结果
console.log("decrypted data:");
console.log(decryptData);

三、代码验证

1 sm2加解密

const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();

publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥
const msgString = "20201307lcy"
const cipherMode = 1; // 1 - C1C3C2,0 - C1C2C3,默认为1 const encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode); // 加密结果
console.log("original data:");
console.log(msgString);
console.log("encrypted data:");
console.log(encryptData);
const decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode); // 解密结果
console.log("decrypted data:");
console.log(decryptData);

2 sm2签名验签

  • 1 纯签名
const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();
const msg = "20201307lcy"
publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥
// 纯签名
let sigValueHex = sm2.doSignature(msg, privateKey); // 签名
console.log(sigValueHex); let verifyResult = sm2.doVerifySignature(msg, sigValueHex, publicKey); // 验签结果
console.log(verifyResult);

  • 2 纯签名 + 生成椭圆曲线点
const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();
const msg = "20201307lcy"
publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥 // 纯签名 + 生成椭圆曲线点
let sigValueHex2 = sm2.doSignature(msg, privateKey, {
pointPool: [sm2.getPoint(), sm2.getPoint(), sm2.getPoint(), sm2.getPoint()], // 传入事先已生成好的椭圆曲线点,可加快签名速度
}); // 签名 console.log(sigValueHex2); let verifyResult2 = sm2.doVerifySignature(msg, sigValueHex2, publicKey); // 验签结果 console.log(verifyResult2);

  • 3 纯签名 + 生成椭圆曲线点 + der编解码
const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();
const msg = "20201307lcy"
publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥 // 纯签名 + 生成椭圆曲线点 + der编解码
let sigValueHex3 = sm2.doSignature(msg, privateKey, {
der: true,
}); // 签名
console.log(sigValueHex3); let verifyResult3 = sm2.doVerifySignature(msg, sigValueHex3, publicKey, {
der: true,
}); // 验签结果
console.log(verifyResult3);

  • 4 纯签名 + 生成椭圆曲线点 + sm3杂凑
const sm2 = require("miniprogram-sm-crypto").sm2;

let keypair = sm2.generateKeyPairHex();
const msg = "20201307lcy"
publicKey = keypair.publicKey; // 公钥
privateKey = keypair.privateKey; // 私钥 // 纯签名 + 生成椭圆曲线点 + sm3杂凑
let sigValueHex4 = sm2.doSignature(msg, privateKey, {
hash: true,
}); // 签名
console.log(sigValueHex4);
let verifyResult4 = sm2.doVerifySignature(msg, sigValueHex4, publicKey, {
hash: true,
}); // 验签结果
console.log(verifyResult4);

3 sm3加密解密

const sm3 = require("miniprogram-sm-crypto").sm3;
const msg = "20201307lcy"
console.log(msg);
let hashData = sm3(msg); // 杂凑
console.log(hashData);



4 sm4 算法实现

const sm4 = require("miniprogram-sm-crypto").sm4;
const msg = '20201307lcy' // 可以为 utf8 串或字节数组
const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特 let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 >填充) console.log(encryptData); let decryptData = sm4.decrypt(encryptData, key);
console.log(decryptData);

sm-crypto密码算法库的更多相关文章

  1. OpenSSL密码算法库: MD5示例小程序

    OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...

  2. liboqs-量子安全密码算法开源C库

    liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...

  3. SM 国密算法踩坑指南

    各位,好久不见~ 最近接手网联的国密改造项目,由于对国密算法比较陌生,前期碰到了一系列国密算法加解密的问题. 所以这次总结一下,分享这个过程遇到的问题,希望帮到大家. 国密 什么是国密算法? 国密就是 ...

  4. Android逆向之旅---Android中锁屏密码算法解析以及破解方案

    一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...

  5. TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法)

    TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法) TOTP - Time-based One-time Password Algori ...

  6. Java实现7种常见密码算法

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...

  7. 信息安全-2:python之hill密码算法[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...

  8. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  9. scikit-learn 支持向量机算法库使用小结

    之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...

  10. scikit-learn 线性回归算法库小结

    scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...

随机推荐

  1. (面试题) 面试官:如何在forEach的循环里使用break

    大家都知道 js 的 forEach里是不能使用break.但是为什么不能在forEach里使用呢?在forEach里使用break 会发生什么呢? 一. 在forEach里使用break 会发生什么 ...

  2. CISCO--配置单臂路由+DHCP

    CISCO--配置单臂路由+DHCP 1.在交换机中创建vlan10和20. Switch(config)#vlan 10 Switch(config-vlan)#vlan 20 2.接口Fa0/1配 ...

  3. Unity 使整个UnityUI变成彩色的BUG

    最近接手了一个两年前的老项目,在这个项目里碰到一个BUG ,每次运行到这个场景的时候,整个Unity 的所有UI包括Unity界面都会变成彩色. 后来发现是因为物体丢失,代码修改Image里的图片颜色 ...

  4. git remote prune origin删除本地有但在远程库已经不存在的分支

    先调用git remote show origin 该命令能够获取远端分支信息,你可以看到和本地和远端不同步的地方: 过时的就是和本地不同步的分支,本地已过时的表示你需要移除这个分支了. 这个时候你需 ...

  5. 问题:为啥explain 后type=all

    最近在学习mysql 调优,学习explain执行计划,为了模拟出type=system或const,我创建了一张表test(id,name),id为主键,里面放了一条数据 执行 EXPLAIN SE ...

  6. Java基础——Scanner扫描字符数组出现问题

    问题:今天写的一个简易学生信息类出现了如下问题Exception in thread "main" java.util.InputMismatchException: For in ...

  7. 修改python下载镜像源

    找到pip.ini(可能在"C:\Users\Administrator\AppData\Roaming\pip\pip.ini")→记事本打开→添加相应源 如果没有找到,在C:\ ...

  8. uniapp 小程序自定义组件样式穿透问题

    1.正在开发时发现自定义组件间样式发生穿透问题 2.主需要引入下面代码可解决 export default { options: { //默认值 isolated(启动隔离) //apply-shar ...

  9. go 的internal 目录

    Go 语言中的软件包推荐按照:组织名/项目名 的形式安排软件包的文件目录结构,一般「项目名」文件目录下还会按照功能.抽象约定.具体实现等维度再划分一些子目录.在 Go 语言里包的导入路径不同则被判定为 ...

  10. 安装nginx依赖库

    nginx安装headers-more-nginx-module,推荐下面这篇贴,步骤简洁明了,本人ubutu18.0.04版本一次性安装成功: https://www.jianshu.com/p/8 ...