前端国密加解密使用方法SM2、SM3、SM4
国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如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相关推荐
- 国密算法分类总结:sm2,sm3,sm4等
前面几篇博文对sm2,sm3,sm4,rsa,des等算法进行了介绍,并且用java,python语言实现了相关算法的运用. 本篇,作为一个阶段性总结,从整体上来回顾一下密码相关业务.当然,重点还是要 ...
- php生成国密验证,PHP+gmssl命令行实现国密加解密
1. 国密介绍 国密算法是我国自主研发创新的一套数据加密处理系列算法.从SM1-SM4分别实现了对称.非对称.摘要等算法功能.特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能.当然 ...
- java实现国密加解密
1. pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-j ...
- Ubuntu18 + laravel + JavaBridge + 招行国密加解密
一.Java 环境安装 1.1直接输入java 根据提示进行安装 sudo apt install openjdk-8-jre-headless ps:踩过的坑:根据其他教程下载java环境包进行安装 ...
- 国密SM2,SM3,SM4的前后台(js和java)加解密写法
目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...
- vue前端国密SM2, SM4 算法实现
vue前端国密SM2, SM4 算法实现 整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采 ...
- javascript sm2 sm3 sm4 国密库
前面研究了iOS端的sm2,sm3,sm4,sm9,zuc国密.前端后期也会接入国密库,所以研究了下JavaScript的国密.如果需要知道算法原理的可以查看我之前的博客,或者看我的github上也有 ...
- 国密SM1\ SM2\ SM3\ SM4\ SSF33算法和国际RSA算法的对应关系
转载自https://blog.csdn.net/hcnetbee/article/details/53692579,部分内容和排版稍作修改. 国密算法由国家密码局发布,包含SM1\ SM2\ SM3 ...
- 前端 crypto-js aes 加解密
背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...
最新文章
- bluecam连接步骤说明_磊科路由器登录设置及默认密码说明
- 双边z变换公式_光通信与数学 傅里叶变换
- 学习关于时间在sql里面的对比,用if语句(这个有点特别)
- Linux根目录详解-转自鸟哥的私房菜
- Windows按键翻译
- 对 NGUI 子节点的位置的一点理解
- ITIL4知识系列之事件管理 (Incident Management)
- 利用遗传算法求解车辆路径问题
- tar 打包解压参数详解
- 一文带你入门 HTTP 协议
- 仿微信朋友圈点击评论自动定位到对应位置
- STM32——浅谈睡眠模式、停机模式、待机模式
- android模仿ios滚动,模仿iOS版微信的滑动View效果
- PDF阅读软件里面的小手工具打开/关闭
- 【数据结构】顺序表的创建、插入、删除、合并
- rsa 长密钥实现及测试
- DataX实践趟坑大全
- 梦幻西游python验证成语_GitHub - rowliner/mhxy: tensorflow实践:梦幻西游人物弹窗识别...
- 《アニマル・ロジック》日语读书笔记2
- String.valueOf()和Integer.valueOf()方法的使用