在Javaweb项目中进行后端管理员RSA加密登录的具体代码实现,要求使用MySQL数据库,利用ajax接口请求
时间: 2023-06-01 12:01:26 浏览: 148
javaweb实现用户登录
1. 首先生成RSA密钥对,可以使用java.security包下的KeyPairGenerator类来实现。
```
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
PrivateKey privateKey = kp.getPrivate();
PublicKey publicKey = kp.getPublic();
```
2. 将生成的公钥存储到数据库中,供前端使用。
```
String publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());
// 将公钥存储到数据库中
String sql = "INSERT INTO admin (public_key) VALUES (?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, publicKeyStr);
pstmt.executeUpdate();
```
3. 前端使用公钥对密码进行加密后发送请求到后台。
```
function encryptPassword(password) {
var publicKey = "xxx"; // 从数据库中获取公钥
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
return encrypt.encrypt(password);
}
$.ajax({
url: "/login",
type: "POST",
data: {
username: $("#username").val(),
password: encryptPassword($("#password").val())
},
success: function (data) {
// 处理登录结果
}
});
```
4. 后台接收到请求后,使用私钥对密码进行解密,然后进行数据库查询验证。
```
String privateKeyStr = "xxx"; // 从配置文件或其他地方获取私钥
byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] passwordBytes = cipher.doFinal(Base64.getDecoder().decode(password));
String sql = "SELECT * FROM admin WHERE username=? AND password=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, new String(passwordBytes, StandardCharsets.UTF_8));
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
// 登录成功
} else {
// 登录失败
}
```
阅读全文