vue-前端加密

1、 SM4算法-gm-crypto

1.1 SM4加密

2012年3月,国家密码管理局正式公布了包含SM4分组密码算法在内的《祖冲之序列密码算法》等6项密码行业标准。与DES和AES算法类似,SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序

1.2 gm-crypto使用
 npm install gm-crypto--save
  • 使用(gm-crypto插件包括SM2\SM3\SM4算法)
    通过 import { SM2, SM3, SM4 } from ‘gm-crypto’ 快速引入,可按需引入
// 使用SM2
const { SM2 } = require('gm-crypto')
const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = 'SM2 椭圆曲线公钥密码算法'
const encryptedData = SM2.encrypt(originalData, publicKey, {
 inputEncoding: 'utf8',
 outputEncoding: 'base64'
})
const decryptedData = SM2.decrypt(encryptedData, privateKey, {
 inputEncoding: 'base64',
 outputEncoding: 'utf8'
})
// 使用SM3
const { SM3 } = require('gm-crypto')
console.log(SM3.digest('abc'))
console.log(SM3.digest('YWJj', 'base64'))
console.log(SM3.digest('616263', 'hex', 'base64'))
// 使用SM4
const { SM4 } = require('gm-crypto')

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = 'SM4 国标对称加密'

/**
* Block cipher modes:
* - ECB: electronic codebook
* - CBC: cipher block chaining
*/

let encryptedData, decryptedData

// ECB
encryptedData = SM4.encrypt(originalData, key, {
 inputEncoding: 'utf8',
 outputEncoding: 'base64'
})
decryptedData = SM4.decrypt(encryptedData, key, {
 inputEncoding: 'base64',
 outputEncoding: 'utf8'
})

// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {
 iv,
 mode: SM2.constants.CBC,
 inputEncoding: 'utf8',
 outputEncoding: 'hex'
})
decryptedData = SM4.decrypt(encryptedData, key, {
 iv,
 mode: SM2.constants.CBC,
 inputEncoding: 'hex',
 outputEncoding: 'utf8'
})

2、 RSA算法-JSEncrypt

2.1 RSA加密

RSA加密算法是一种非对称加密算法,RSA加密使用了 一对 密钥(即公钥和私钥,一组对应的数字,其二进制位长度可以是1024位或者2048位.长度越长其加密强度越大,目前为止公之于众的能破解的最大长度为768位密钥,因此只要高于768位,相对就比较安全);加密过程中使用公钥加密数据,使用私钥进行解密之前加密过的数据

2.2 jsencrypt使用
npm install jsencrypt --save
  • 全局引入使用(publicKey为公钥,privateKey为私钥)
    (1)在main.js引入 import { JSEncrypt } from ‘jsencrypt’
    (2)挂载全局方法
//main.js文件

//JSEncrypt加密方法
Vue.prototype.$encryptedData = function(publicKey, data) {
//new一个对象
let encrypt = new JSEncrypt()
//设置公钥
encrypt.setPublicKey(publicKey)
//password是要加密的数据,此处不用注意+号,因为rsa自己本身已经base64转码了,不存在+,全部是二进制数据
let result = encrypt.encrypt(data)
return result
}

//JSEncrypt解密方法
Vue.prototype.$decryptData = function(privateKey, secretWord) {
// 新建JSEncrypt对象
let decrypt = new JSEncrypt()
// 设置私钥
decrypt.setPrivateKey(privateKey)
// 解密数据
let result = decrypt.decrypt(secretWord)
return result
}

(3)页面调用

//test.vue文件
//调用 加密方法
let encryptedData  =  this.$encryptedData (publicKey,data)
// 调用解密方法
let decryptData =  this.$decryptData (privateKey,encryptedData  )
  • 单页面使用(局部使用)(publicKey为公钥,privateKey为私钥)
    (1)在文件中引入 import { JSEncrypt } from ‘jsencrypt’
    (2)调用
   // 加密
  encryptedData(publicKey, password){
     //new一个对象
    let encrypt = new JSEncrypt()
    //设置公钥
    encrypt.setPublicKey(publicKey)
    //password是要加密的数据,此处不用注意+号,因为rsa自己本身已经base64转码了,不存在+,全部是二进制数据
   let result = encrypt.encrypt(password)
  }
  // 解密
  decryptData(privateKey,secretWord){
     // 新建JSEncrypt对象
   let decrypt = new JSEncrypt()
    // 设置私钥
    decrypt.setPrivateKey(privateKey)
    // 解密数据
    let result = decrypt.decrypt(secretWord)
  }
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值