vue rsa加密解密,签名验证

需要引入两个包

一个是进行加密,解密的:npm install jsencrypt --save
一个是进行签名验证的:npm install jsrsasign --save

加密,解密

在main.js中引入

import JsEncrypt from 'jsencrypt'

挂载在main.js中的加密解密方法

/**
 * JSEncrypt 加密
 * @param {Object} strIng
 * @return {string} 
 */ 
Vue.prototype.$JSEncrypt = function(strIng){
	// 实例化一个JSEncrypt对象
	let jse = new JsEncrypt();
	// 设置公钥(公钥秘钥需自己生成)
	jse.setPublicKey(`-----BEGIN PUBLIC KEY-----
	MIGfMA0GCSqGSIb3DQEBAQUAA4(假的公钥)
	-----END PUBLIC KEY-----`);
	// 加密
	let encrypted = jse.encrypt(strIng);
	return encrypted;
}

/**
 * JSEncrypt 解密
 * @param {Object} strIng
 * @return {string} 
 */ 
Vue.prototype.$decryptData = function(strIng){
	let jse = new JsEncrypt();
	// 设置秘钥
	jse.setPrivateKey(`-----BEGIN RSA PRIVATE KEY-----
	MIICeAIBADANBgkqhkiG9w(假的秘钥)
	-----END RSA PRIVATE KEY-----`);
	// 解密加密过的字符串
	let decrypted = jse.decrypt(strIng);
	// 打印结果
	return decrypted;
}

在页面中使用

var a = this.$JSEncrypt('Hello word');
var c = this.$decryptData(a);
console.log('加密生成:'+a);
console.log('解密生成:'+c);

签名生成

import jsRsasign from 'jsrsasign'
/**
 * 生成签名
 * @param {Object} strIng
 * @return {type}
 */
Vue.prototype.$getSignCode = function(strIng){
	// 创建RSAKey对象
	var rsa = new jsRsasign.RSAKey();
	//因为后端提供的是pck#8的秘钥对,所以这里使用 KEYUTIL.getKey来解析秘钥
	var signPrivateKey = `-----BEGIN PRIVATE KEY-----
		MIICeAIBADANBgkqhkiG9w(假的秘钥)
		-----END PRIVATE KEY-----`
	// 将密钥转码,其实就是将头部尾部默认字符串去掉
	signPrivateKey = jsRsasign.KEYUTIL.getKey(signPrivateKey);
	// 创建Signature对象,设置签名编码算法
	// alg:对应的是规则 需要和后端统一
	var sig = new jsRsasign.KJUR.crypto.Signature({"alg": "MD5withRSA","prov": "cryptojs/jsrsa","prvkeypem": signPrivateKey});
	// 初始化
	sig.init(signPrivateKey)
	// 传入待加密字符串
	sig.updateString(strIng);
	// 生成密文
	var sign = jsRsasign.hextob64(sig.sign());
	// 对加密后内容进行URI编码
	// sign = encodeURIComponent(sign);
	//把参数与密文拼接好,返回
	var params = 'Str='+strIng+'&sign='+sign; 
	return params;
}
var b = this.$getSignCode('Hello word');
console.log(b);

验证签名

/**
 * 验证签名
 * @param {String} strIng 签名前的明文
 * @param {String} data 签名后的数据
 * @return {Boolean} true | false
 */
Vue.prototype.$attestationCode = function(strIng,data){
	// 创建RSAKey对象
	var rsa = new jsRsasign.RSAKey();
	//因为后端提供的是pck#8的公钥对,所以这里使用 KEYUTIL.getKey来解析公钥
	var signPublicKey = `-----BEGIN PUBLIC KEY-----
		MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqpXgllRE6tZCMmqpocGV6Swf1QrPi5DPry/7D8z7NTW5VbLz+
		l2wbi2KLlgzUb6hMvzx/UP/to+
		TZvBaKavRaTKm/mdu4/vNrTg3KvZ6DcYa7aYqGNZEjzrwmFPOf1LQ0h5+jSxyIbwhViO7G4HtcmgtjTz0YyHgZyiBiCxQPtwIDAQAB
		-----END PUBLIC KEY-----`
	// 将公钥转码
	signPublicKey = jsRsasign.KEYUTIL.getKey(signPublicKey);
	// 创建Signature对象,设置签名编码算法
	var sig = new jsRsasign.KJUR.crypto.Signature({"alg": "MD5withRSA","prov": "cryptojs/jsrsa","prvkeypem": signPublicKey});
	// 初始化
	sig.init(signPublicKey)
	// 传入待加密字符串
	sig.updateString(strIng);
	// !接受的参数是16进制字符串!
	let sign = sig.verify(jsRsasign.b64tohex(data));
	return sign;
}
var e = this.$attestationCode('Hello word',b);
console.log(e);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值