要实现前端Vue使用RSA加密数据,后端Java进行解密的过程,需要完成以下步骤:


1.在前端Vue中引入RSA库


在前端Vue中,可以使用jsencrypt这个RSA库来实现加密。可以使用npm安装:


npm install jsencrypt

然后,在Vue组件中引入:


import JSEncrypt from 'jsencrypt'

 2.在前端Vue中生成RSA密钥


使用jsencrypt库生成RSA密钥对,其中公钥用于前端加密数据,私钥发送给后端保存。


// 生成密钥对

const crypt = new JSEncrypt({default_key_size: 1024})

const publicKey = crypt.getPublicKey()

const privateKey = crypt.getPrivateKey()

 

// 将公钥发送给后端,后端需要保存这个公钥

3.前端Vue使用公钥加密数据


使用前面生成的公钥,将需要加密的数据加密。加密后的数据需要发送给后端解密。


// 加密数据

const crypt = new JSEncrypt()

crypt.setPublicKey(publicKey)

const encryptedData = crypt.encrypt(data)

 4.后端Java使用私钥解密数据


在Java后端中,需要使用Bouncy Castle库来进行RSA解密。这个库可以使用Maven进行依赖管理:


<dependency>

    <groupId>org.bouncycastle</groupId>

    <artifactId>bcprov-jdk15on</artifactId>

    <version>1.69</version>

</dependency>

然后,在Java代码中使用私钥进行解密:


import org.bouncycastle.jce.provider.BouncyCastleProvider

import java.security.Security

import java.security.KeyFactory

import java.security.spec.PKCS8EncodedKeySpec

import java.security.PrivateKey

import javax.crypto.Cipher

 

// 添加Bouncy Castle作为安全提供者

Security.addProvider(new BouncyCastleProvider())

 

// 读取私钥信息

byte[] privateKeyBytes = Base64.getDecoder().decode(privateKey);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);

PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(keySpec);

 

// 使用私钥解密数据

Cipher decryptCipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");

decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);

byte[] decryptedData = decryptCipher.doFinal(encryptedData);

 实现过程中需要注意:


公钥和私钥需要保密,不要将私钥上传到服务器或者提交到版本控制系统中。

RSA加密算法只能对比较小的数据进行加密,对于比较大的数据需要分段加密。

在Java后端中使用Bouncy Castle库可以避免一些兼容性问题。

以下是两条示例说明:


示例一:加密和解密字符串


前端Vue代码:


// 生成密钥对

const crypt = new JSEncrypt({default_key_size: 1024})

const publicKey = crypt.getPublicKey()

const privateKey = crypt.getPrivateKey()

 

// 将公钥发送给后端,后端需要保存这个公钥

 

// 加密数据

const crypt = new JSEncrypt()

crypt.setPublicKey(publicKey)

const data = 'Hello, world!'

const encryptedData = crypt.encrypt(data)

 

// 将加密后的数据发送给后端

后端Java代码:


import org.bouncycastle.jce.provider.BouncyCastleProvider

import java.security.Security

import java.security.KeyFactory

import java.security.spec.PKCS8EncodedKeySpec

import java.security.PrivateKey

import javax.crypto.Cipher

 

// 添加Bouncy Castle作为安全提供者

Security.addProvider(new BouncyCastleProvider())

 

// 读取私钥信息

byte[] privateKeyBytes = Base64.getDecoder().decode(privateKey);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);

PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(keySpec);

 

// 使用私钥解密数据

Cipher decryptCipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");

decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);

byte[] decryptedData = decryptCipher.doFinal(encryptedData);

 

// 输出解密后的数据

System.out.println(new String(decryptedData))

示例二:加密和解密JSON数据


前端Vue代码:


// 生成密钥对

const crypt = new JSEncrypt({default_key_size: 1024})

const publicKey = crypt.getPublicKey()

const privateKey = crypt.getPrivateKey()

 

// 将公钥发送给后端,后端需要保存这个公钥

 

// 加密数据

const crypt = new JSEncrypt()

crypt.setPublicKey(publicKey)

const data = {name: 'Alice', age: 25}

const encryptedData = crypt.encrypt(JSON.stringify(data))

 

// 将加密后的数据发送给后端

后端Java代码:


import org.bouncycastle.jce.provider.BouncyCastleProvider

import java.security.Security

import java.security.KeyFactory

import java.security.spec.PKCS8EncodedKeySpec

import java.security.PrivateKey

import javax.crypto.Cipher

 

// 添加Bouncy Castle作为安全提供者

Security.addProvider(new BouncyCastleProvider())

 

// 读取私钥信息

byte[] privateKeyBytes = Base64.getDecoder().decode(privateKey);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);

PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(keySpec);

 

// 使用私钥解密数据

Cipher decryptCipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");

decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);

byte[] decryptedData = decryptCipher.doFinal(encryptedData);

 

// 输出解密后的数据

String decryptedJson = new String(decryptedData);

JSONObject decryptedObject = new JSONObject(decryptedJson);

System.out.println(decryptedObject.getString("name") + ", " + decryptedObject.getInt("age"));


 遵循:公钥加密-私钥解密,私钥加密-公钥解密的原则



————————————————

版权声明:本文为CSDN博主「ilearns」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Snh232428/article/details/133924861