vue-前端加密
pubKey: ‘MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1QQRl0HlrVv6kGqhgonD6A9SU6ZJpnEN+Q0blT/ue6Ndt97WRfxtSAs0QoquTreaDtfC4RRX4o+CU6BTuHLUm+eSvxZS9TzbwoYZq7ObbQAZAY+SYDgAA5PHf1wNN20dGMFFgVS/y0ZWvv1UNa2laEz0
·
vue-前端加密、RSA算法-JSEncrypt、SM4算法-gm-crypto
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)
}
更多推荐
已为社区贡献7条内容
所有评论(0)