Vue(uniapp)内使用RSA加密,对应后端RSA/ECB/PKCS1Padding加密模式

RSA加密算法
RSA是非对称加密算法,拥有一个公钥一个私钥,公钥用来加密,私钥用来解密,通常来说非对称加密比对称加密要耗时间。

AES对称加密、解密的速度要比RSA快很多。

这里使用的也是最常用的RSA加密算法。

后端加密使用RSA/ECB/PKCS1Padding规范时,前端要想对应也需要使用对应的加密规范,这里我们需要引入一个插件:jsencrypt

引入jsencrypt插件

在项目里打开终端,输入引入插件命令:

npm install jsencrypt --save

引入如下图:

 引入成功后会多出两个文件,如下:此时我们已经把插件引进来了

封装 

将代码封装起来,后面好方便引用,找个文件夹新建js文件,我这里是在util里新建文件Jsencrypt.js

Jsencrypt.js文件内容如下: 

import JSEncrypt from '../node_modules/jsencrypt/bin/jsencrypt.js'
//公钥
let publicKey = ``;
//私钥
let privateKey = ``;
const encryptor = new JSEncrypt();

//RSA设置公钥
export function rsa_setPublicKey(word) {
	publicKey = word;
	encryptor.setPublicKey(publicKey);
}

//RSA加密
export function rsa_encrypt(word) {
    return encryptor.encrypt(word);
}

//RSA设置私钥
export function rsa_setPrivateKey(word) {
	privateKey = word;
	encryptor.setPrivateKey(privateKey);
}

//RSA解密
export function rsa_decrypt(word) {
    return encryptor.decrypt(word);
}

然后在main.js中引入

//调用RSA方法
import {
 	rsa_setPublicKey,
 	rsa_encrypt,
    rsa_setPrivateKey,
    rsa_decrypt
} from '@/util/Jsencrypt.js';
Vue.prototype.rsa_setPublicKey = rsa_setPublicKey
Vue.prototype.rsa_encrypt = rsa_encrypt
Vue.prototype.rsa_setPrivateKey = rsa_setPrivateKey
Vue.prototype.rsa_decrypt = rsa_decrypt

使用

最后在页面内使用RSA加密,注:这里的公钥和秘钥是我早就准备好的,可以用来测试加密代码是否成功。

//公钥
const publicKey = `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmiWDVukCmOxIzJdQng7teOsqBJHg7xv01mHFMb7CuSZr5E8rSvH/w11B7lG1HxxaI/51EHqV4hMXu4V+EeeqN/SeBpXyCR9Vm4Fiv7UtkOpAauxfE6Q73hIKYLJuu3EMbiQa4oS7IrXAyxMfAycpGM+1MAUzUJ5i9Xe5NzhpjX+KLI8JNVQHhB3tH7B7ViZgPCEQFpE4N13zrzgGTLVk2g1vEoCRUCiY5+RYmUI1269JSTWfKTBzA4Yio8QYm1TlRMX7CoEvSJU124rvcLySiKaxn4x9K8Dv/juQu7YOOZCDWzZdMGzZeiAOcbcA0PfSRmotctxBzdhG71VT2PFmwIDAQAB`;
//设置公钥
this.rsa_setPublicKey(publicKey)
//加密
var skey = this.rsa_encrypt('123456这里是明文');
console.log(skey)
//私钥
var privateKey = `MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC+aJYNW6QKY7EjMl1CeDu146yoEkeDvG/TWYcUxvsK5JmvkTytK8f/DXUHuUbUfHFoj/nUQepXiExe7hX4R56o39J4GlfIJH1WbgWK/tS2Q6kBq7F8TpDveEgpgsm67cQxuJBrihLsitcDLEx8DJykYz7UwBTNQnmL1d7k3OGmNf4osjwk1VAeEHe0fsHtWJmA8IRAWkTg3XfOvOAZMtWTaDW8SgJFQKJjn5FiZQjXbr0lJNZ8pMHMDhiKjxBibVOVExfsKgS9IlTXbiu9wvJKIprGfjH0rwO/+O5C7tg45kINbNl0wbNl6IA5xtwDQ99JGai1y3EHN2EbvVVPY8WbAgMBAAECggEAJZJ1qYUfxX0Ogyd5B5i6D5Yxh6izu+b/GfFcmlj5SJj7So2aL4GoIUgCg9enhl5X8o4Wei/XkhYvG7xXUXqwcBpaaaCpGbE5mkhzh43pY13Oh6ndh+3o45gUhTxtmhk40abduJqySULMUq/3F7NVZYq/5zNP54DqgxFcvkRnsmg17B2uEbpTSGkjPlNGgeRs3IvadmCdz2deIJeMUqsCQ4t8VzOomxluQIzQx7y9rFpBXXWuTGJe761eKzNRt6PN2k8bXaWjIyOTdanMSVxHCkKVqZfrp/QndM5oMgYcknhUDMg5YPOlitA1JWmJGW3oEupxjW81arRopGrgvNNkIQKBgQDhas7PSTAwFYWsrGdYnEhvYr1qv1hp6ebYjOMU5sW8ZB8BqplrlKoecJYM809I2RyqDAKKOrwMIzYeYa+NvIj7zhY36E7iTkv/posYNJjYo4IBSvH9q/fWS2uRxK1g3ViYPH8Z/lByK31hxKYy/YVyFx+mKlIZffcnaVUurDOsbQKBgQDYPdtOJYPtYYk3XXsB9YxZSsQGYGbjwO/cd4EC0a1genm+vsjm2RbslzPu7LgMTfsEnP5GMtnWKdPStw6bNynWHLl08bQAmzSWuvU/+W90+nNO42etCo9wbOnoKgm/uEJjozwEfMG8Jr8N4Enxu7oe8hrcnk3438Mg5WkUCQPlJwKBgQCTSNtqGzMOJ/HYuikof6zggo6rIe0d/wOjeKKjNIn8pxqPVy25WkCxdPTF73Bdc+bDwOcj9G6MK7GftkojfQ2wIZ7o1rQ8L9Z+aw41OaCo5GT8fUCSc/uSnGLjsrNqOBY8GkMd88oSXxIkgH3rkTTRMASw6LQODf0gVjWfMkrtHQKBgCIBSDV3zNFNn0hnmOpr9NAt47mk+0khlBa1bEJHOt6LJA4M7obu6J34ASC3dRHqSWkmTw42/O6i0T63rsJV4GxdRATR5Z6ayaBScjLHRPG+WNe1Bx69JGVnmzj5M2NE1JvalZuXCthNt4m1Fau/+7rWE8dR1a0ncwX/TZDrAgPNAoGAR/zEln2NZwx+Bh7jzHOWmrilb3yLian8FEtF0KnlHkCq3MKj1BRPKyG6v/cli3cg9gRJ/QX8S7h/QcfRAacXDcGaW78NVZB4s3iFyrQFqS4Dtz6kS+rXGM2K+mmeoWPhrZB3ngJau3d/s2OSMDgehU6rBNrbitJ8eGvtQ7rIs78=`;
//设置私钥
this.rsa_setPrivateKey(privateKey);
//解密
var decode = this.rsa_decrypt(skey)
console.log(decode)

使用后浏览器输出如下:

 最后注意:公钥是用来对数据加密的,私钥是用来解密的,如果需要解密必须要有私钥

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端Vue RSA加密示例代码如下: ```javascript 前端Vue RSA加密 import JSEncrypt from 'jsencrypt' // 创建RSA加密实例 const encrypt = new JSEncrypt() // 设置RSA公钥 const publicKey = 'YOUR_RSA_PUBLIC_KEY' encrypt.setPublicKey(publicKey) // 要加密的数据 const data = 'YOUR_DATA_TO_ENCRYPT' // 使用RSA公钥进行加密 const encryptedData = encrypt.encrypt(data) // 将加密后的数据发送到后端进行解密 ``` 后端Java解密示例代码如下: ```java import java.security.KeyFactory; import java.security.PrivateKey; import java.security.spec.PKCS8EncodedKeySpec; import javax.crypto.Cipher; import org.apache.commons.codec.binary.Base64; public class RSADecrypt { public static String decrypt(String encryptedData, String privateKeyStr) throws Exception { // 将Base64编码后的私钥字符串转换为PrivateKey对象 byte[] privateKeyBytes = Base64.decodeBase64(privateKeyStr); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec); // 使用私钥进行解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] encryptedBytes = Base64.decodeBase64(encryptedData); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // 返回解密后的数据 return new String(decryptedBytes); } } ``` 请将 `YOUR_RSA_PUBLIC_KEY` 替换为你的RSA公钥,然后在前端加密后的数据发送到后端后端调用 `RSADecrypt.decrypt()` 方法进行解密,并将 `YOUR_DATA_TO_ENCRYPT` 替换为你要加密的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值