文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue普通加密及国密SM2、SM3和sm4的使用例子

2022-12-14 06:02

关注

相关网址

sm-crypto:https://www.npmjs.com/package/sm-crypto

介绍

1. SM2是非对称加密算法

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

2.SM3是一种密码杂凑算法

用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可以满足电子认证服务系统等应用需求,于2010年12月17日发布。它是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。

3.SM4是一种分组密码算法

SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序

普通加密

安装依赖

npm install crypto-js

新建utils/Crypto.js文件


import CryptoJS from 'crypto-js'
// 默认的 KEY 与 iv 如果没有给
const KEY = CryptoJS.enc.Utf8.parse("12345678901234567890");
const IV = CryptoJS.enc.Utf8.parse('12345678901234567890');

export const Encrypt = (word, keyStr, ivStr) => {
    let key = KEY;
    let iv = IV;
    if (keyStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }
    let srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

export const Decrypt = (word, keyStr, ivStr) => {
    let key  = KEY;
    let iv = IV;
    if (keyStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }
    let base64 = CryptoJS.enc.Base64.parse(word);
    let src = CryptoJS.enc.Base64.stringify(base64);
    let decrypt = CryptoJS.AES.decrypt(src, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

 export const passwordAddStr = 'testAdd'

使用—加密

import {Encrypt, passwordAddStr} from '@/util/Crypto.js'

let password = '123123qwe' + passwordAddStr
password = Encrypt(password)

使用—解密

import {Decrypt, passwordAddStr} from '@/util/Crypto.js'
let password
password = Decrypt(password).replace(passwordAddStr, '')

SM2使用

安装依赖

npm install sm-crypto

新建utils/Crypto.js文件


const sm2 = require('sm-crypto').sm2
export const  encrypt = (txt) => {
    const cipherMode = 1 ;// 1 - C1C3C2,0 - C1C2C3,默认为1
    const publicKey = "秘钥" // 一般由后端定义
    let encryptData = sm2.doEncrypt(txt, publicKey, cipherMode ) // 加密结果
    return '04' + encryptData
}

使用—加密

import {encrypt} from '@/util/Crypto.js'

let password = '1234'
password = encrypt(password)

使用—解密

由后端解密

SM3使用

安装依赖

npm install sm-crypto

新建utils/Crypto.js文件


const sm3 = require('sm-crypto').sm3
export const  encrypt = (txt) => {
  let encryptData = sm3(txt) // 加密结果
  return encryptData
}

使用—加密

import {encrypt} from '@/util/Crypto.js'

let password = '1234'
password = encrypt(password)

使用—解密

不可解密

sm4使用

安装依赖

npm install sm-crypto

新建utils/Crypto.js文件


const sm4 = require('sm-crypto').sm4
export const  encrypt = (txt, key) => {
  let encryptData = sm4.encrypt(txt, key) // 加密结果
  return encryptData
}

使用—加密

import {encrypt} from '@/util/Crypto.js'

let password = '1234'
password = encrypt(password)

总结

到此这篇关于vue普通加密及国密SM2、SM3和sm4使用的文章就介绍到这了,更多相关vue普通加密及国密使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯