基于前端vue 后端java 实现前端传加密密文 后端解密的集中方法 并用代码实现
时间: 2024-01-23 20:02:40 浏览: 211
用java实现“加密解密”
前端Vue传递加密密文到后端Java,后解密的示例代码如下:
前端Vue加密代码:
```javascript
// 导入jsencrypt库
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)
// 将加密后的数据发送到后端
// 例如使用axios发送POST请求
axios.post('/api/decrypt', { encryptedData })
.then(response => {
console.log(response.data)
})
.catch(error => {
console.error(error)
})
```
后端Java解密代码:
```java
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
@RestController
public class DecryptionController {
// 将Base64编码后的私钥字符串转换为PrivateKey对象
private PrivateKey getPrivateKey(String privateKeyStr) throws Exception {
byte[] privateKeyBytes = Base64.decodeBase64(privateKeyStr);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(keySpec);
}
@PostMapping("/api/decrypt")
public String decryptData(@RequestBody EncryptedData encryptedData) throws Exception {
String privateKeyStr = "YOUR_RSA_PRIVATE_KEY";
PrivateKey privateKey = getPrivateKey(privateKeyStr);
// 使用私钥进行解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] encryptedBytes = Base64.decodeBase64(encryptedData.getEncryptedData());
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
// 返回解密后的数据
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
```
创建一个名为 `EncryptedData` 的Java类,用于接收前端传递的加密数据:
```java
public class EncryptedData {
private String encryptedData;
public String getEncryptedData() {
return encryptedData;
}
public void setEncryptedData(String encryptedData) {
this.encryptedData = encryptedData;
}
}
```
请将 `YOUR_RSA_PUBLIC_KEY` 替换为你的RSA公钥,将 `YOUR_RSA_PRIVATE_KEY` 替换为你的RSA私钥。在前端,你可以使用axios或其他HTTP库发送POST请求到后端的 `/api/decrypt` 路径,并将加密后的数据作为请求体的 `encryptedData` 字段传递。后端将解密后的数据作为响应返回给前端。
阅读全文