一、环境配置

在之前的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. QT 连接SQLIte数据库

    1.新建一个qt应用程序 2.在.pro文件中添加 sql     (下图,可以查看使用方法) 添加结构查看: 3.开始连接数据库 4.运行结果查看: 5.查看数据库文件: 6.使用可视化工具创建一个 ...

  2. 【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?

    这个问题,面试被问到的概率还是很大的.以下关于 如何判断一个对象是否存活 的回答,完全参照<深入理解Java虚拟机>一书,有需要的可以看书学习.以下是题目解析 判断对象是否存活的算法包括: ...

  3. java学习:八大基本类型变量

    1.类 在java中用class来定义一个类,类是java程序的基本单位 类描述的是具有共性的一类事物,所以我们又可以把类称作为模板技术   如何理解共性: 具有相同的属性-->java变量 具 ...

  4. 分布式计算 Distributed computing

    分布式计算(Distributed computing),又译为分散式运算,是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处 ...

  5. Java中创建线程的方式和线程中常用方法?

    Java中如何创建线程? 继承Thread类 实现Rnnable接口 实现Callable接口 通过线程池创建线程 线程中常用方法 线程等待:wait() 进入等待状态,只有等其他线程唤醒或中断才能运 ...

  6. 亲测:一个完整Vue开发环境搭建。

    参考博客飞机: https://www.cnblogs.com/zhaomeizi/p/8483597.html

  7. (1127)arm 架构, c++模板

    (1)ARM M0 (2)c++形参

  8. java轻量级锁、重量级锁、可重入锁、偏向锁、自旋锁的概念

    1.重量级锁 作为互斥同步的方式,是最基础的锁,其他的锁都是为了减少开销做的优化,重量级锁借助了monitor 对象,monitor对象中有三个区域,分别是entity site. owner和wai ...

  9. ptyhon基础课程_4

    16 循环语句 1.while 语句的格式:"while 条件 :" while True : #循环输出"你好,世界" print ("你好,世界& ...

  10. hooks组件中,使用防抖节流的方法。

    在类组件中,使用节流函数可以在componentDidMount中定义. 而在hooks函数中,该怎么定义呢,我们一起看看. 要使用useCallback包起来,返回一个记忆的缓存函数,这样才能达到节 ...