javaweb项目登录用RSA加密具体代码怎么写
时间: 2023-05-28 09:01:24 浏览: 52
以下是一个简单的 JavaWeb 项目登录用 RSA 加密的代码示例:
1. 首先,生成 RSA 密钥对:
```java
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.genKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
```
2. 将公钥保存到服务器端,传递给客户端:
```java
String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded());
// 将 publicKeyString 保存到服务器端,比如保存到数据库中
```
3. 客户端用公钥加密用户名和密码:
```java
PublicKey publicKey = getPublicKeyFromServer(); // 从服务器端获取公钥
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedUsername = cipher.doFinal(username.getBytes());
byte[] encryptedPassword = cipher.doFinal(password.getBytes());
```
4. 传递加密后的用户名和密码到服务器端:
```java
String encryptedUsernameString = Base64.getEncoder().encodeToString(encryptedUsername);
String encryptedPasswordString = Base64.getEncoder().encodeToString(encryptedPassword);
// 将 encryptedUsernameString 和 encryptedPasswordString 传递到服务器端
```
5. 服务器端用私钥解密用户名和密码:
```java
PrivateKey privateKey = getPrivateKeyFromServer(); // 从服务器端获取私钥
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedUsername = cipher.doFinal(Base64.getDecoder().decode(encryptedUsernameString));
byte[] decryptedPassword = cipher.doFinal(Base64.getDecoder().decode(encryptedPasswordString));
String username = new String(decryptedUsername);
String password = new String(decryptedPassword);
// 对比 username 和 password 是否正确
```
需要注意的是,RSA 加密的过程比较耗时,建议使用线程池来处理加密/解密操作。同时,为了防止中间人攻击,需要使用 SSL/TLS 协议来保证通信的安全性。