使用RSA算法实现数据加密——前端js后端Java
时间: 2023-10-17 07:05:42 浏览: 139
RSA算法是一种非对称加密算法,常用于数据加密和数字签名等。在前端使用js实现RSA算法加密,后端使用Java实现RSA算法解密,具体步骤如下:
前端(js)实现:
1. 生成RSA密钥对,代码如下:
```javascript
function generateRSAKey() {
var crypt = new JSEncrypt({ default_key_size: 1024 });
crypt.getKey();
return crypt;
}
```
2. 使用公钥加密数据,代码如下:
```javascript
function encryptData(data, publicKey) {
var crypt = new JSEncrypt();
crypt.setKey(publicKey);
var encryptedData = crypt.encrypt(data);
return encryptedData;
}
```
后端(Java)实现:
1. 使用私钥解密数据,代码如下:
```java
public static String decryptData(String data, String privateKey) throws Exception {
byte[] dataBytes = Base64.decodeBase64(data);
byte[] keyBytes = Base64.decodeBase64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateK);
byte[] decryptedData = cipher.doFinal(dataBytes);
return new String(decryptedData);
}
```
2. 生成RSA密钥对,代码如下:
```java
public static Map<String, String> generateRSAKey() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, String> keyMap = new HashMap<String, String>();
keyMap.put("publicKey", Base64.encodeBase64String(publicKey.getEncoded()));
keyMap.put("privateKey", Base64.encodeBase64String(privateKey.getEncoded()));
return keyMap;
}
```
注意:在前端和后端使用RSA算法加密和解密的时候,需要使用相同的密钥对(即公钥和私钥)。
阅读全文