国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。

不多废话直接上干货

国密SM的安装方法

项目中 可能存在版本问题 用这个降级安装 (后面出现安装问题同理)

npm install --save sm-crypto   或  npm install --save sm-crypto --legacy-peer-deps   

1、SM2是非对称加密算法

它是基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号发布。

SM2采用的是ECC 256位的一种,其安全强度比RSA 2048位高,且运算速度快于RSA。

SM2引入使用方法 

const sm2 = require('sm-crypto').sm2
const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1
****后端的话可以约定但后端默认加密方法好像是0 - C1C2C3****
在解密时 使用的密钥和密位一般是传输过来的,密文传输得来的话开头会由04
需要删除,同时密钥可能存在必须小写的情况 key.slice(2).toLocaleLowerCase() 可以使用这个方法let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode) // 加密结果let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果下面的一般特殊情况才会用到
encryptData = sm2.doEncrypt(msgArray, publicKey, cipherMode) // 加密结果,输入数组decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode, {output: 'array'}) // 解密结果,输出数组

2、SM3是一种密码杂凑算法(用于数据摘要保证完整性)

用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可以满足电子认证服务系统等应用需求,于2010年12月17日发布。

它是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。

引入使用方法

const sm3 = require('sm-crypto').sm3this.loginForm = sm3(this.loginForm) //获得摘要后的数据

3、SM4是分组加密算法(对称性的加密方法)

跟SM1类似,是我国自主设计的分组对称密码算法,用于替代DES/AES等国际算法。SM4算法与AES算法具有相同的密钥长度、分组长度,都是128bit。于2012年3月21日发布,适用于密码应用中使用分组密码的需求。
加密

const sm4 = require('sm-crypto').sm4
const msg = '你好,我是空空.' // 可以为 utf8 串或字节数组
const key = 'facca330123456789abcdas3210' // 可以为 16 进制串或字节数组,要求为 128 比特前后端约定一种下面的加密方法
let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
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 模式

解密

const sm4 = require('sm-crypto').sm4
const encryptData = '这里放加密后的数据' // 可以为 16 进制串或字节数组
const key = 'abcdeffedcba98765432100123456789' // 可以为 16 进制串或字节数组,要求为 128 比特用约定的解密方法解密let decryptData = sm4.decrypt(encryptData, key) // 解密,默认输出 utf8 字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
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 模式

4.baser64

一般上述的那些会混合baser64使用 一块提一嘴吧
  baser64安装

npm install --save js-base64 npm install --save js-base64  --legacy-peer-deps  

引入方法 
在main.js中加入

import {Base64} from 'js-base64'
Vue.prototype.$Base64 = Base64;

使用方法 

 let password='asdahsjdj'let encPass=this.$Base64.encode(password);//加密let decPass=this.$Base64.decode(encPass);//解密

当初为了找到前端的使用方法,搜的脑子疼,为了配合后端加解密测试脑子更疼了,

使用方法的时候千万要主要 前后端保持加解密密钥格式方法的一致性

附上npm网址 :https://www.npmjs.com/package/sm-crypto?activeTab=explore

前端国密加解密使用方法SM2、SM3、SM4相关推荐

  1. 国密算法分类总结:sm2,sm3,sm4等

    前面几篇博文对sm2,sm3,sm4,rsa,des等算法进行了介绍,并且用java,python语言实现了相关算法的运用. 本篇,作为一个阶段性总结,从整体上来回顾一下密码相关业务.当然,重点还是要 ...

  2. php生成国密验证,PHP+gmssl命令行实现国密加解密

    1. 国密介绍 国密算法是我国自主研发创新的一套数据加密处理系列算法.从SM1-SM4分别实现了对称.非对称.摘要等算法功能.特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能.当然 ...

  3. java实现国密加解密

    1. pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-j ...

  4. Ubuntu18 + laravel + JavaBridge + 招行国密加解密

    一.Java 环境安装 1.1直接输入java 根据提示进行安装 sudo apt install openjdk-8-jre-headless ps:踩过的坑:根据其他教程下载java环境包进行安装 ...

  5. 国密SM2,SM3,SM4的前后台(js和java)加解密写法

    目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...

  6. vue前端国密SM2, SM4 算法实现

    vue前端国密SM2, SM4 算法实现 整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采 ...

  7. javascript sm2 sm3 sm4 国密库

    前面研究了iOS端的sm2,sm3,sm4,sm9,zuc国密.前端后期也会接入国密库,所以研究了下JavaScript的国密.如果需要知道算法原理的可以查看我之前的博客,或者看我的github上也有 ...

  8. 国密SM1\ SM2\ SM3\ SM4\ SSF33算法和国际RSA算法的对应关系

    转载自https://blog.csdn.net/hcnetbee/article/details/53692579,部分内容和排版稍作修改. 国密算法由国家密码局发布,包含SM1\ SM2\ SM3 ...

  9. 前端 crypto-js aes 加解密

    背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...

最新文章

  1. bluecam连接步骤说明_磊科路由器登录设置及默认密码说明
  2. 双边z变换公式_光通信与数学 傅里叶变换
  3. 学习关于时间在sql里面的对比,用if语句(这个有点特别)
  4. Linux根目录详解-转自鸟哥的私房菜
  5. Windows按键翻译
  6. 对 NGUI 子节点的位置的一点理解
  7. ITIL4知识系列之事件管理 (Incident Management)
  8. 利用遗传算法求解车辆路径问题
  9. tar 打包解压参数详解
  10. 一文带你入门 HTTP 协议
  11. 仿微信朋友圈点击评论自动定位到对应位置
  12. STM32——浅谈睡眠模式、停机模式、待机模式
  13. android模仿ios滚动,模仿iOS版微信的滑动View效果
  14. PDF阅读软件里面的小手工具打开/关闭
  15. 【数据结构】顺序表的创建、插入、删除、合并
  16. rsa 长密钥实现及测试
  17. DataX实践趟坑大全
  18. 梦幻西游python验证成语_GitHub - rowliner/mhxy: tensorflow实践:梦幻西游人物弹窗识别...
  19. 《アニマル・ロジック》日语读书笔记2
  20. String.valueOf()和Integer.valueOf()方法的使用

热门文章

  1. TiDB at ZaloPay Infrastructure Lesson Learned
  2. win 2003 SP2 (32位X86) 中文版 升级补丁包 下载地址 光盘整合集成方法
  3. setup界面的network configuration 进不去的原因
  4. Citrix_XenServer-6.1安装过程详解
  5. 了解如何定义定义变量和调用函数
  6. Filament介绍
  7. Matlab中meshgrid的用法
  8. 我的第一个c语言小程序
  9. SQL中exists关键字的用法
  10. 百度分享自定义分享案例