写一段用户登录的jsp代码,密码加盐MD5,
时间: 2024-03-04 11:04:48 浏览: 13
好的,以下是一段用户登录的JSP代码,包括密码加盐MD5的处理:
```jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.security.MessageDigest"%>
<%@page import="java.security.NoSuchAlgorithmException"%>
<%@page import="java.util.Base64"%>
<%@page import="java.sql.*" %>
<%
// 获取用户提交的表单数据
String username = request.getParameter("username");
String password = request.getParameter("password");
// 建立数据库连接
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String passwd = "123456";
conn = DriverManager.getConnection(url, user, passwd);
// 查询数据库中是否有该用户
String sql = "SELECT * FROM users WHERE username=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
rs = pstmt.executeQuery();
if (rs.next()) {
// 数据库中有该用户,验证密码是否正确
String salt = rs.getString("salt");
String dbPassword = rs.getString("password");
String hashedPassword = hashPassword(password, salt);
if (hashedPassword.equals(dbPassword)) {
// 登录成功,设置session
session.setAttribute("username", username);
response.sendRedirect("index.jsp");
} else {
// 密码不正确,返回登录页面
response.sendRedirect("login.jsp?error=1");
}
} else {
// 数据库中无该用户,返回登录页面
response.sendRedirect("login.jsp?error=1");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 对密码进行加盐MD5处理
*
* @param password 原始密码
* @param salt 盐值
* @return 加盐MD5后的密码
*/
private String hashPassword(String password, String salt) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] saltBytes = Base64.getDecoder().decode(salt);
md.update(saltBytes);
md.update(password.getBytes());
byte[] hashedBytes = md.digest();
return Base64.getEncoder().encodeToString(hashedBytes);
}
%>
```
在上述代码中,我们使用了JDBC连接数据库,查询用户名和密码是否匹配。密码的加盐MD5处理方法在`hashPassword`函数中实现,它使用了Java自带的`MessageDigest`类来进行MD5加密,同时使用Base64进行盐值的编解码。加盐MD5处理可以有效的增加密码的安全性,避免使用常见的弱密码。