sm-crypto密码算法库
一、环境配置
在之前的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密码算法库的更多相关文章
- OpenSSL密码算法库: MD5示例小程序
OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...
- liboqs-量子安全密码算法开源C库
liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...
- SM 国密算法踩坑指南
各位,好久不见~ 最近接手网联的国密改造项目,由于对国密算法比较陌生,前期碰到了一系列国密算法加解密的问题. 所以这次总结一下,分享这个过程遇到的问题,希望帮到大家. 国密 什么是国密算法? 国密就是 ...
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法)
TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法) TOTP - Time-based One-time Password Algori ...
- Java实现7种常见密码算法
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...
- 信息安全-2:python之hill密码算法[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- scikit-learn 支持向量机算法库使用小结
之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...
- scikit-learn 线性回归算法库小结
scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...
随机推荐
- Java实现简单薪水计算器相关操作代码
/** * 薪水计算器 * 1.通过键盘输入用户的月薪,每年是几个薪水 * 2.输出用户年薪 * 3.输出一行字"如果年薪超过10万,恭喜你超越了90%的国人:如果年薪超过了20万,恭喜你超 ...
- SVN 之切换账号
简单来说两步就搞定了 第一步删除已缓存的数据 第二步输入要切换账号密码 具体步骤图解如下: 第一步: 点击TortoiseSVN 找到设置 点击已保存数据 点击清除全部 再点击确定 第二步: 点击s ...
- 预览服务器上的html静态网页
预览服务器上的html静态网页 远程服务器中html静态文件不方便直接查看 使用vscode快速预览远程服务器上的html静态文件 我遇到的场景: 我使用windows电脑办公,使用vscode的ss ...
- Prometheus 特点
1.1 Prometheus的特点 Prometheus是一个开源的完整监控解决方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算.统一分析和告警的新模型. 相比于传统 ...
- VS2022在打开设计器的时候提示某变量未声明或者未赋值
有可能是在属性中直接添加引用的dll文件,导致dll并不能被该文件稳定引用,可以删除引用,重新添加试试
- PK获取面积
BOOL PK_AskFaceAreas(tag_t face_tag, double tol, double &areas) {//获得面积 tag_t ps_tag = NULL_TAG; ...
- vue项目跳转外部链接,替换链接地址参数信息
//修改url某个指定的参数 url 地址. paramName 参数. repalceValue替换的新值 replaceUrl( url, paramName, repalceValue){ ...
- python菜鸟学习: 13. excel文件编辑openpyxl使用
#1. xls文件转换成xlsx文件,需要使用到 win32com from win32com import client as wc filepath = "D:\\python\\liy ...
- 【驱动】libjpeg 库的移植
1.下载库 http://www.ijg.org/ 下载 jpegsrc.v9e.tar.gz 2.准备好空文件夹位置 opt/libdecode opt/libdecode/lib opt ...
- Ubuntu20.04安装PEA软件
PEA软件可用于实时精密卫星钟差估计,精密卫星定轨,精密单点定位,电离层建模以及DCB估计等. Ginan开发人员推荐使用Ubuntu18.04或Ubuntu20.04搭建,本文使用Ubuntu20. ...