vue中使用国密算法SM2、SM3、SM4

这篇具有很好参考价值的文章主要介绍了vue中使用国密算法SM2、SM3、SM4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装包

npm install gm-crypto

2、引入包

import { SM4, SM3, SM2 } from 'gm-crypto';

3、SM2加密解密

let SM2Data = reactive({
  publicKey: publicKey,
  privateKey: privateKey,
  originalData: 'SM2 椭圆曲线公钥密码算法',
  encryptedData: '',
  decryptedData: ''
})

//加密
const encryptSM2 = () => {
  SM2Data.encryptedData = SM2.encrypt(SM2Data.originalData, SM2Data.publicKey, {
    inputEncoding: 'utf8',
    outputEncoding: 'base64'
  })
}

//解密
const decryptedSM2 = () => {
  SM2Data.decryptedData = SM2.decrypt(SM2Data.encryptedData, SM2Data.privateKey, {
    inputEncoding: 'base64',
    outputEncoding: 'utf8'
  })
}

4、SM3加密

let SM3Data = reactive({
  originalData: 'SM3水电费水电费',
  encryptedData: ''
})

//加密
const encryptSM3 = () => {
  // SM3Data.encryptedData = SM3.digest(SM3Data.originalData)
  // SM3Data.encryptedData = SM3.digest(SM3Data.originalData, 'base64')
  SM3Data.encryptedData = SM3.digest(SM3Data.originalData, 'utf8', 'base64')
}

5、SM4加密解密

let SM4Data = reactive({
  key: '0123456789abcdeffedcba9876543210',
  iv: '0123456789abcdeffedcba9876543210',
  originalData: 'SM4 国标对称加密',
  encryptedData: '',
  decryptedData: ''
})


//加密
const encryptSM4 = () => {
  // ECB
  SM4Data.encryptedData = SM4.encrypt(SM4Data.originalData, SM4Data.key, {
    inputEncoding: 'utf8',
    outputEncoding: 'base64'
  })
  //CBC
  // SM4Data.encryptedData = SM4.encrypt(SM4Data.originalData, SM4Data.key, {
  //   iv: SM4Data.iv,
  //   mode: SM2Data.constants.CBC,
  //   inputEncoding: 'utf8',
  //   outputEncoding: 'hex'
  // })
}
//解密
const decryptedSM4 = () => {
  // ECB
  SM4Data.decryptedData = SM4.decrypt(SM4Data.encryptedData, SM4Data.key, {
    inputEncoding: 'base64',
    outputEncoding: 'utf8'
  })
  //CBC
  // SM4Data.decryptedData = SM4.decrypt(SM4Data.encryptedData, SM4Data.key, {
  //   iv: SM4Data.iv,
  //   mode: SM2Data.constants.CBC,
  //   inputEncoding: 'utf8',
  //   outputEncoding: 'hex'
  // })
}

6、vue3+element完整代码

<template>
  <div class="container">

    <el-row :gutter="24">
      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
        相关文档:
        <a href="https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator"
          target="_blank">gm-crypto</a>
      </el-col>
    </el-row>

    <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="SM2" name="SM2">
        <el-row :gutter="24">SM2 公钥: {{ SM2Data.publicKey }} </el-row>
        <el-row :gutter="24">SM2 私钥: {{ SM2Data.privateKey }} </el-row>
        <el-row :gutter="24">
          <el-col :xs="18" :sm="18" :md="18" :lg="18" :xl="18">
            <el-input v-model="SM2Data.originalData" placeholder="请输入需要加密的数据" clearable />
          </el-col>
          <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6">
            <el-button type="cyan" size="mini" @click="encryptSM2">加密</el-button>
          </el-col>
        </el-row>
        <el-row :gutter="24">SM2 加密数据: </el-row>
        <el-row :gutter="24">
          <el-col :xs="18" :sm="18" :md="18" :lg="18" :xl="18">
            <el-input v-model="SM2Data.encryptedData" placeholder="请输入需要解密的数据" type="textarea" />
          </el-col>
          <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6">
            <el-button type="cyan" size="mini" @click="decryptedSM2">解密</el-button>
          </el-col>
        </el-row>
        <el-row :gutter="24">SM2 解密数据: {{ SM2Data.decryptedData }} </el-row>
      </el-tab-pane>

      <el-tab-pane label="SM3" name="SM3">
        <el-row :gutter="24">
          <el-col :xs="18" :sm="18" :md="18" :lg="18" :xl="18">
            <el-input v-model="SM3Data.originalData" placeholder="请输入需要加密的数据" clearable />
          </el-col>
          <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6">
            <el-button type="cyan" size="mini" @click="encryptSM3">加密</el-button>
          </el-col>
        </el-row>
        <el-row :gutter="24">SM3 加密数据: {{ SM3Data.encryptedData }} </el-row>
      </el-tab-pane>

      <el-tab-pane label="SM4" name="SM4">
        <el-row :gutter="24">SM4 秘钥: {{ SM4Data.key }} </el-row>
        <el-row :gutter="24">
          <el-col :xs="18" :sm="18" :md="18" :lg="18" :xl="18">
            <el-input v-model="SM4Data.originalData" placeholder="请输入需要加密的数据" clearable />
          </el-col>
          <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6">
            <el-button type="cyan" size="mini" @click="encryptSM4">加密</el-button>
          </el-col>
        </el-row>
        <el-row :gutter="24">SM4 加密数据: {{ SM4Data.encryptedData }} </el-row>
        <el-row :gutter="24">
          <el-col :xs="18" :sm="18" :md="18" :lg="18" :xl="18">
            <el-input v-model="SM4Data.encryptedData" placeholder="请输入需要解密的数据" clearable />
          </el-col>
          <el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6">
            <el-button type="cyan" size="mini" @click="decryptedSM4">解密</el-button>
          </el-col>
        </el-row>
        <el-row :gutter="24">SM4 解密数据: {{ SM4Data.decryptedData }} </el-row>
      </el-tab-pane>
    </el-tabs>


  </div>
</template>

<script lang="ts" setup name="DemoGuomi">
// 该加密方式需要安装gm-crypto
import { SM4, SM3, SM2 } from 'gm-crypto';
import { reactive, ref } from 'vue';


const { publicKey, privateKey } = SM2.generateKeyPair()
let activeName = ref('SM2')
let SM2Data = reactive({
  publicKey: publicKey,
  privateKey: privateKey,
  originalData: 'SM2 椭圆曲线公钥密码算法',
  encryptedData: '',
  decryptedData: ''
})

let SM3Data = reactive({
  originalData: 'SM3水电费水电费',
  encryptedData: ''
})

let SM4Data = reactive({
  key: '0123456789abcdeffedcba9876543210',
  iv: '0123456789abcdeffedcba9876543210',
  originalData: 'SM4 国标对称加密',
  encryptedData: '',
  decryptedData: ''
})


const handleClick = (tab: string, event: HTMLElement) => {
  console.log(tab, event);
}

//加密
const encryptSM2 = () => {
  SM2Data.encryptedData = SM2.encrypt(SM2Data.originalData, SM2Data.publicKey, {
    inputEncoding: 'utf8',
    outputEncoding: 'base64'
  })
}

//解密
const decryptedSM2 = () => {
  SM2Data.decryptedData = SM2.decrypt(SM2Data.encryptedData, SM2Data.privateKey, {
    inputEncoding: 'base64',
    outputEncoding: 'utf8'
  })
}

//加密
const encryptSM3 = () => {
  // SM3Data.encryptedData = SM3.digest(SM3Data.originalData)
  // SM3Data.encryptedData = SM3.digest(SM3Data.originalData, 'base64')
  SM3Data.encryptedData = SM3.digest(SM3Data.originalData, 'utf8', 'base64')
}

//加密
const encryptSM4 = () => {
  // ECB
  SM4Data.encryptedData = SM4.encrypt(SM4Data.originalData, SM4Data.key, {
    inputEncoding: 'utf8',
    outputEncoding: 'base64'
  })
  //CBC
  // SM4Data.encryptedData = SM4.encrypt(SM4Data.originalData, SM4Data.key, {
  //   iv: SM4Data.iv,
  //   mode: SM2Data.constants.CBC,
  //   inputEncoding: 'utf8',
  //   outputEncoding: 'hex'
  // })
}
//解密
const decryptedSM4 = () => {
  // ECB
  SM4Data.decryptedData = SM4.decrypt(SM4Data.encryptedData, SM4Data.key, {
    inputEncoding: 'base64',
    outputEncoding: 'utf8'
  })
  //CBC
  // SM4Data.decryptedData = SM4.decrypt(SM4Data.encryptedData, SM4Data.key, {
  //   iv: SM4Data.iv,
  //   mode: SM2Data.constants.CBC,
  //   inputEncoding: 'utf8',
  //   outputEncoding: 'hex'
  // })
}
</script>

gm-crypto相关文档:https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator

vue3+element ui例子:https://gitee.com/huanglgln/vue-sys-manage-el

 vue3+view ui例子:https://gitee.com/huanglgln/vue-sys-manage

 vue3+Ant Design Vue ui例子:https://gitee.com/huanglgln/vue-sys-manage-adv 文章来源地址https://www.toymoban.com/news/detail-551328.html

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

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

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

相关文章

  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    由于项目的需求,需要集成国密加解密,于是对国密又温故知新了一遍。同时整理了一下国密的一些算法。 本文主要从国密相关算法的简介、应用系统的集成、工具类的封装等方面入手,对国密进行深入的学习。 为了保障商用密码的安全性,国家密码局制定了一系列密码标

    2024年02月14日
    浏览(71)
  • java 国密算法工具类(支持SM2 SM3 SM4)

    前言 工具采用BC库实现,支持前后端加解密,前端建议使用sm-crypto 引入pom依赖 基本使用如下 国密SM2算法 国密SM3算法 国密SM4算法使用

    2024年02月13日
    浏览(49)
  • 国密算法SM2,SM3,SM4-java实现原理

    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,基于ECC。其签名速度与秘钥生成速度都快于RSA,非对称加密,该算法已公开 SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。SM3主要用数字签名及验证、消息认

    2024年02月13日
    浏览(39)
  • Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)

    2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC

    2024年02月15日
    浏览(47)
  • 新手入门 | 掌握国密算法:新手指南: SM2 / SM3 / SM4密码算法详解

    在密码学领域,有多种加密与签名算法,它们在信息安全领域发挥着举足轻重的作用。如今,随着互联网的快速发展,网络安全已经成为各类信息系统完整性、可用性、保密性的重要保障,越来越多的国产密码算法得到了广泛的应用与关注。在本文中,我们将重点介绍三个经

    2024年02月12日
    浏览(145)
  • 前端国密加解密使用方法SM2、SM3、SM4

       国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。      不多废话直接上干货 项目中 可能存在

    2023年04月09日
    浏览(48)
  • 国密算法SM2、SM3的使用

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

    2024年02月06日
    浏览(46)
  • 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)
  • 国密SM2/SM3算法

    分类 1、SM1是一种分组加密算法 对称加密算法中的分组加密算法,其分组长度、秘钥长度都是128bit,算法安全保密强度跟 AES 相当,但是算法不公开,仅以IP核的形式存在于芯片中,需要通过加密芯片的接口进行调用。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙

    2024年02月05日
    浏览(64)
  • Delphi SM2/SM4国密算法

        最近忙个医保平台的项目,涉及SM2/SM4的签名,验签,加密,解密的业务操作过程。毕竟现在用Delpih的人不是很多,懂这方面的技术的人也更少,能涉及密码算法的少之更少,网上也能搜到一些开源的代码,也由于使用的人少,未加通过业务系统来验证,所以存在不少Bu

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包