前端国密加解密使用方法SM2、SM3、SM4

这篇具有很好参考价值的文章主要介绍了前端国密加解密使用方法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').sm3
    this.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文章来源地址https://www.toymoban.com/news/detail-407565.html

到了这里,关于前端国密加解密使用方法SM2、SM3、SM4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SM2国密算法加解密

    接口安全设计原则的一个点就是数据不能明文传输,除了https这个必须的请求外,接口数据加密也是一个重要的方式,下面介绍一下SM2国密算法加解密的使用方式。 这里我就针对目前前后端分离架构的方式来简单介绍一下如何正确使用 SM2 算法对数据进行加解密,介绍分为后

    2024年02月11日
    浏览(37)
  • 基于hutool 封装国密sm2,sm4 加解密算法

    基于hutool 封装国密sm2,sm4 加解密算法 1. 加入依赖包 2. 编码

    2024年02月13日
    浏览(47)
  • 国密:生成SM2秘钥、加解密及加验签

    国密改造已经持续了很长时间了,相信很多从事金融科技类的程序猿都遇到过这个需求。这篇文章就为大家带来笔者对于国密改造的一些经验,主要是代码层面,有兴趣的同学可以研究下国密的算法模型! 注:本文所用到的工具类并非笔者所写! 目录 一、国密简述 二、依赖

    2024年02月03日
    浏览(46)
  • 国密SM2: 加解密实现 java代码完整示例

    目录  具体Java代码SM2算法加解密实现Demo: pom依赖引入 :  国家密码管理局于2010年12月17日发布了SM2算法,并要求现有的基于RSA算法的电子认证系统、密钥管理系统、应用系统进升级改造,使用支持国密SM2算法的证书。    基于ECC椭圆曲线算法的SM2算法,则普遍采用256位密钥

    2024年02月13日
    浏览(44)
  • 国密sm2公钥加密 私钥解密java代码实现

    目录 一、引入jar包 二、生成秘钥对,加解密工具类

    2024年02月11日
    浏览(67)
  • 国密SM2算法(JS加密,C#、Java解密)

    常见的渗透测试会将网站登录时密码使用明文传输视为风险。推荐使用国密算法或者RSA算法对密码进行加密传输。 RSA加密(JS加密,C#、Java解密)请参考《RSA对称加密(JS加密,C#、Java解密)》​​​​​​ 本文描述国密SM2算法的实现。 一、工作原理 前端js使用公钥进行加密

    2024年02月02日
    浏览(52)
  • OpenSSL 3.1.1 ECC 加密、解密、签名、验签(国密 sm2、sm3)

    openssl 3 默认废弃了 旧版本 (opessl 1.x) 的部分api 导致部分旧ecc 代码无法使用(可以通过配置编译选项打开) ,这里展示如何使用新接口用ECC 进行加密解密。 新接口是真的方便,基本上你都不需要懂啥密码学知识,对我们这种密码白痴来说太好了 头文件 生成密钥对 导出公

    2024年02月05日
    浏览(58)
  • 医保移动支付加密解密请求工具封装【国密SM2SM4】

    医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开发语各不相同,可能要有java的、c#的、python的、pb的、nodjs的、php的、还可能有Delphi的等。。。。很多开发语言

    2024年01月21日
    浏览(85)
  • 前端使用国密SM4进行加密、解密

    前端/后端使用 国密SM4 进行加密/解密, 【注意】前后端配合加解密时,需要我们 自定义密钥 ,一般由后端提供 下载 sm4util 依赖 sm4util 依赖使用说明 使用 - ECB 模式加解密 后端代码参考:https://blog.csdn.net/qq_48922459/article/details/122130283 这种办法好像只能使用默认密钥 key,不能

    2023年04月23日
    浏览(50)
  • vue前端国密SM2, SM4 算法实现

    整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采用sm4 对后端返回结果进行解密进行前端展示 目前主要常用的国密算法有sm-crypto,gm-crypto,gm-crypt(SM4) 1、安装 sm-crypto 2、包装加解密

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包