当前位置: 首页 > Web前端 > vue.js

RSA加密-Vue

时间:2023-04-01 01:17:33 vue.js

前言上一篇博客RSA加密-Java实现Java版RSA公钥加密-私钥解密,私钥加密-公钥解密,本篇博客在Vue下实现加解密,记录前后端下的两次加解密场景:前端公钥加密-后端私钥解密后端私钥加密-前端公钥解密附上其他链接:RSA加密-JavaRSA段加密-JavaRSA段解密-Vue前端公钥加密-后端私钥解密这种情况比较简单,一般做法是安装jsencryptnpminstalljsencryptRSAEncryption.js/***非对称加密-RSA*前端公钥加密-后端私钥解密***/import{JSEncrypt}from'jsencrypt/lib/JSEncrypt'//这里的公钥在Java端生成constPUBLIC_KEY='MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaaI4MBywkCjIppZnraqN3pbrcZTq/t0+aMBo8K3pK9BDD6XkM6N2Yfcva7BSFbUWuAcI7piXak0UKn9CElDuhNzUSgQn4IXKxIt3Iva5cV83qYumj+0yRjjLT8Muu1Y1rgBZjY9oBwhVoV+Twg25+UJ+6Q6HM4xTwQQJDoyy4jwIDAQAB';//注:正常情况下私钥并不会记录在前端,这里使用私钥解密只是记录私钥解密方法constPRIVATE_KEY='MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJpojgwHLCQKMimlmetqo3elutxlOr+3T5owGjwrekr0EMPpeQzo3Zh9y9rsFIVtRa4BwjumJdqTRQqf0ISUO6E3NRKBCfghcrEi3ci9rlxXzepi6aP7TJGOMtPwy67VjWuAFmNj2gHCFWhX5PCDbn5Qn7pDoczjFPBBAkOjLLiPAgMBAAECgYBnBBKhG7frY5IMDxwd4Euna767hB4qAlbte+JE+ozgrOzyiDXm0wXk0yjKqm8WhczTRwEbYsImjdKmP/GSQoN1AU7yEzM8j0Jgq46m9ZVrHhu2NpuZpr+XueWnA6FNz6tybBgcCwA4t8dvfbOrvjqhrCu01O1xWIpjronyFBN4IQJBAPGuF58xjXyANnp5YU8NhUQ73tTIveRlOpMXDSYkf9lWG26XIGUIsTe0f5jssiNmYtxG+lUm9LLfZgOLcrVkDZ0CQQCjjrBNMXub49efVTCg+nCGT2QXW2BHg/qs5vu8Y34LUHoD/hoEJ+AOWOdnhpRoYOpBwJAm3Gu4a1VmZGGafp0bAkAdfY3aWhSWtZpwNXF/UPoLCnc1Zc1uGkAchLqRBfEn1w7/3qcQTRA66OaNBYzzLuIvWOXhECDZ1tK+6fw0UCItAkAOLibW6n1fDKf7JnWq30u2OVfiNofoa2bmarhUowOgk3+grP0wcwyX8dlOPnrLeeuVe86DsASe3p9u2zEjJesVAkEAhkLiv4TXrC1QlJl7ghksUfFmdT7M4Zxlzj10ConMgq68HkLdmn2nNLsjhUHGwJe3EqM6aozn4zw/Z7uPIT9Fsw==';exportconstRSAENCRY={/***公钥加密*@paramval需要加密的字符串*@returnstring返回加密结果*/encryptByPublicKey:function(val=''){if(val===''){return'';}letencryptor=newJSEncrypt()//创建一个新的JSEncrypt对象encryptor.setPublicKey(PUBLIC_KEY)//设置公钥returnencryptor.encrypt(val)//加密要加密的数据},/***私钥解密*@paramval*@returns{string|false|null|PromiseLike}*/decryptByPrivateKey:function(val=''){if(val===''){return'';}letdecrypt=newJSEncrypt()//创建一个新的JSEncrypt对象decrypt.setPrivateKey(PRIVATE_KEY)//设置私钥returndecrypt.decrypt(val)//解密要解密的数据}}验证加解密import{RSAENCRY从“../utils/RSAEncryption”让数据=“RSA加密!”;让encryptDataByPublicKey=RSAENCRY.encryptByPublicKey(数据);console.log(“encryptDataByPublicKey:”,encryptDataByPublicKey)让decryptDataByPrivateKey=RSAENCRY.decryptByPrivateKey(encryptDataByPublicKey);console.log("decryptDataByPrivateKey:",decryptDataByPrivateKey)结果如下ok,如图,已经实现了前端公钥加密,后端私钥解密后端私钥加密-前端公钥解密这种情况有点牵强,因为不想在前端记录私钥,所以通过后端私钥-前端公钥加密来解密,后端私有加密的内容keyRSA加密-Java已有记载,这里不再赘述。要实现前端公钥的解密,需要修改配置文件中的内容。从node-modules中复制jsencrypt,这里我复制到src/libs目录下修改src/libs/jsencrypt/lib/lib/jsbn/rsa.js1。将RSAKey.prototype.decrypt中的this.doPrivate(c)修改为this.doPublic(c);RSAKey.prototype.decrypt=function(ctext){varc=parseBigInt(ctext,16);varm=this.doPublic(c);//varm=this.doPrivate(c);如果(m==null){返回null;}返回pkcs1unpad2(m,(this.n.bitLength()+7)>>3);};2。修改pkcs1unpad2注解代码functionpkcs1unpad2(d,n){varb=d.toByteArray();变种我=0;while(i=b.length){返回空值;}}varret="";while(++i191)&&(c<224)){ret+=String.fromCharCode(((c&31)<<6)|(b[i+1]&63));++我;}else{ret+=String.fromCharCode(((c&15)<<12)|((b[i+1]&63)<<6)|(b[i+2]&63));我+=2;}}returnret;}RSADecryption.js/***非对称加密-RSA*后端私钥加密-前端公钥解密*//***非对称加密-RSA*后端私钥加密-前端publickeydecryption*/import{JSEncrypt}from'../libs/jsencrypt/lib/JSEncrypt'constPUBLICKEY='MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaaI4MBywkCjIppZnraqN3pbrcZTq/t0+aMBo8K3pK9BDD6XkM6N2Yfcva7BSFbUWuAcI7piXak0UKn9CElDuhNzUSgQn4IXKxIt3Iva5cV83qYumj+0yRjjLT8Muu1Y1rgBZjY9oBwhVoV+Twg25+UJ+6Q6HM4xTwQQJDoyy4jwIDAQAB';exportconstRSADECRY={/***公钥解密*@paramsecretWord*@returns{解密|string|false|PromiseLike}*/decryptByPublicKey:function(val=''){if(val===''){return'';}让加密=新的JSEncrypt();加密.setPublicKey(PUBLICKEY);//使用公钥加密私钥数据解密returnencrypt.decrypt(val);}}调用后端encryByPrivateKey函数生成私钥加密密文Stringdata="RSAencrypt!";StringencryDataByPrivateKey=encryptByPrivateKey(数据);System.out.println(“encryDataByPrivateKey:”+encryDataByPrivateKey);Theresultisasfollows:thefront-endpublickeydecryptioncallimport{RSADECRY}from"../utils/RSADecryption"letdecryptData="AwovsO+xeiFSQe6mN9RRCz3FFlMXdJHKcrqbMfxSHUpWIPtw8mFsuX84r7TSVhYXB9ATA7nqWxMnKJgkPu+nFXeXSnApjce0MjFtjLpl9wrklVrOL6L0cmzu3DthC44Opwj5EVWF9tjiH7YdKFVK/Q5HVPKcZk=";letdecryptDataByPublicKey=RSADECRY.decryptByPublicKey(decryptData);console.log("decryptDataByPublicKey:",decryptDataByPublicKey)结果如下所示:参考博客:https://my.oschina.net/lwenhao/blog/4304318来源GitHub:https://github.com/Maggieq8324/coisini-rsaGitee:https://gitee.com/maggieq8324/coisini-rsa$$-End-$$