Java-使用MD5对密码进行加密
原创约 1896 字大约 6 分钟...
Java-使用MD5对密码进行加密
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
Md5Utils.java
package net.ptcs.my12306.util;
import java.security.MessageDigest;
public class Md5Utils {
public static void main(String[] args) {
System.out.println(Md5Utils.md5("123456"));
}
public final static String md5(String s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
byte[] btInput = s.getBytes();
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

得到结果为:
e10adc3949ba59abbe56e057f20f883e
打开Pl/sql工具将所有的测试用户密码均加密操作 sql语句:
select * from MY12306_TAB_USER t
update my12306_tab_user set password = 'e10adc3949ba59abbe56e057f20f883e';

在登陆时使用Md5 LoginServlet.java
package net.ptcs.my12306.controller;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.service.UserService;
import net.ptcs.my12306.util.Md5Utils;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet(description = "", urlPatterns = { "/LoginServlet" })
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决乱码问题
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//1.获取登录页面的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
String code = request.getParameter("code");
String auto = request.getParameter("auto_Login");//获取用户是否自动登录的复选框的值
//2、服务端非空校验
StringBuffer sb = new StringBuffer();
if(username == null || "".equals(username.trim())) {
sb.append("用户名为空");
}
if(password == null || "".equals(password.trim())) {
if(sb.length() == 0) {//此处是为咯让页面显示只有一个提示,而不是一堆提示信息
sb.append("密码为空");
}
}
if(code == null || "".equals(password.trim())) {
if(sb.length() == 0) {
sb.append("验证码为空");
}
}
if(sb.length() > 0) {
request.setAttribute("login_message", sb.toString());
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//3.验证码合法性校验
String session_code=(String) request.getSession().getAttribute("code");
if(session_code.equalsIgnoreCase(code)) {//不区分大小写的比对
/* 怎么写登录?
* 2.调用底层service的login方法,返回一条用户数据,这是一种用户体验
*
* 如果用户信息不为空,则登录成功,跳转到用户模块的主页面
* 如果用户信息为空,则登录失败,提示失败信息并返回登录页面
*/
UserService service = UserService.getInstance();
Users user = service.login(username,Md5Utils.md5(password));
System.out.println("user:67line " + user);
if(user == null) {
//登录失败
// request.setAttribute("message", "用户名或者密码错误");//这里是测试jsp页面java代码的接收参数
request.setAttribute("login_message", "用户名或者密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//登陆成功
//登录成功
//在主页面中显示用户信息,1.把用户信息放入一个地方,这个地方各个页面都可以从这里拿数据,
//那么这个地方是HttpSession
HttpSession session=request.getSession();
session.setAttribute("user", user);
//根据用户是否自动登录,来写cookie
if("auto".equals(auto))
{
//写Cookie的套路:先new一个cookie,然后调用response的addCookie方法就可以写cookie了
Cookie username_cookie=new Cookie("username", URLEncoder.encode(username, "utf-8"));
username_cookie.setMaxAge(7*24*60*60);//过期时间为一周(备注:值为-1会话级cookie关闭浏览器失效 值为 0不记录cookie)
username_cookie.setPath(request.getContextPath()+"/");//设置cookie到当前工程的路径
Cookie password_cookie=new Cookie("password",Md5Utils.md5(password));
password_cookie.setMaxAge(7*24*60*60);
password_cookie.setPath(request.getContextPath()+"/");
Cookie rule_cookie=new Cookie("rule",user.getRule());
rule_cookie.setMaxAge(7*24*60*60);
rule_cookie.setPath(request.getContextPath()+"/");
response.addCookie(username_cookie);
response.addCookie(password_cookie);
response.addCookie(rule_cookie);
}
//成功后跳转到哪?要看用户的rule:如果是管理员,去往管理员主页面;如果是普通用户,去往普通用户主页面
if("2".equals(user.getRule())) {
//普通用户
request.getRequestDispatcher("user/index.jsp").forward(request,response);
}else {
//管理员
request.getRequestDispatcher("admin/index.jsp").forward(request, response);
}
}
}else {
//验证码输入错误
request.setAttribute("login_message", "验证码输入错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
}
在注册时使用Md5 UserServlet.java
package net.ptcs.my12306.controller;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.ptcs.my12306.entity.CertType;
import net.ptcs.my12306.entity.City;
import net.ptcs.my12306.entity.UserType;
import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.service.UserService;
import net.ptcs.my12306.util.Md5Utils;
/**
* Servlet implementation class UserServlet
*/
@WebServlet(description = "", urlPatterns = { "/UserServlet" })
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//1.获取数据
String username=request.getParameter("username");//用户名
String password=request.getParameter("password");//密码
String confirm_password=request.getParameter("confirm_password");//确认密码
String real_name = request.getParameter("real_name");//真实姓名
String sex=request.getParameter("sex");//性别
String province = request.getParameter("province");//省份
String city = request.getParameter("city");//城市
String cert_type = request.getParameter("cert_type");//证件类型
String cert = request.getParameter("cert");//证件号码
String birthday_date=request.getParameter("birthday");//出生日期
String user_type = request.getParameter("user_type");//旅客类型
String content = request.getParameter("content");//备注
String agree = request.getParameter("agree");//是否同意on/null 被选中/非选
//2.数据的非空校验和合法性校验
StringBuffer sb = validateRegisterForm(username, password, confirm_password,agree);
if(sb.length() > 0) {
//如果校验不通过,那么返回注册页面,让用户再注册一次
request.setAttribute("message", "必填信息为空,请重新注册");
request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
}else {
//3.调用底层service的注册方法添加用户到数据库
Date birthday=null;
try {
birthday=new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthday"));
} catch (Exception e) {
e.printStackTrace();
}
UserService userService=UserService.getInstance();
// Integer id, String username, String password, String rule,
// String realname, Character sex, City city, CertType certtype,
// String cert, Date birthday, UserType usertype, String content,
// Character status, String loginIp, String imagePath String.charAt(Integer.parseInt(sex)) cert_type user_type 1
// Users user = new Users(null,username,password,"2",real_name,null,
// new City().setCityId(city),null,cert,birthday,null,content,null,request.getRemoteAddr(),null);//此处应该将所有的数据插入
Users user = new Users();
user.setUsername(username);//用户名
user.setPassword(Md5Utils.md5(password));//密码
user.setRule("2");//用户类型 2为普通用户
user.setRealname(real_name);//真实姓名
user.setSex(sex.charAt(0));//性别 String 转 Character
City c = new City();
c.setCityId(city);
user.setCity(c);//获取城市 String 转 引用类型
user.setCerttype(new CertType(Integer.parseInt(cert_type), null));//证件类型 String 转 引用类型
user.setCert(cert);//证件号码
try {
user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday_date));
} catch (ParseException e) {
e.printStackTrace();
}//出身日期 String 转 date
user.setUsertype(new UserType(Integer.parseInt(user_type), null));//旅客类型 String 转 引用类型
user.setContent(content);//备注
user.setLoginIp(request.getRemoteAddr());//设置IP
//服务端校验通过之后,注册方法调用之前,应该先判断用户名是否已经存在
/*
* 则需要定义判断用户名是否已经存在的方法,如果存在则返回注册页面,提示用户名已经存在,
* 如果不存在则继续注册
*/
if(userService.isExistsUserName(username))
{
//用户名已经存在,回到注册页面
request.setAttribute("message", "用户名已被占用");
// request.getRequestDispatcher("/user_register.jsp").forward(request, response);
request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
}else
{
if(userService.register(user))
{
//System.out.println("register success");
//注册成功,重定向去到登录页面
//request.getRequestDispatcher("/login.jsp").forward(request, response);
/*
//弹窗效果:技术实现,对响应进行设置,响应就是response
response.setContentType("text/html;charset=utf-8");
//获取输出流,输出一段script代码
PrintWriter pw=response.getWriter();
pw.println("<script>alert('"+"注册成功"+"');location.href='login.jsp';</script>");
*/
//生产环境不用挨骂的代码:需求,既要有弹窗又要重定向登录页面
response.sendRedirect(request.getContextPath()+"/login.jsp?message=registersuccess");
//response.sendRedirect(request.getContextPath()+"/login.jsp");//request.getContextPath()===/my12306_user_register
}else
{
// System.out.println("register fail");
//注册失败,回到注册页面
request.setAttribute("message", "注册失败");
//request.getRequestDispatcher("/user_register.jsp").forward(request, response);
request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
}
}
}
}
/**
* 对表单进行服务端校验的方法
* @param username
* @param password
* @param confirm_password
* @return
*/
private StringBuffer validateRegisterForm(String username, String password,String confirm_password,String agree) {
StringBuffer validate_message=new StringBuffer();
if(username==null||"".equals(username))
{
validate_message.append("用户名为空");
}
if(password==null||"".equals(password)||confirm_password==null||"".equals(confirm_password))
{
validate_message.append("密码或者确认密码为空");
}
if(!password.equals(confirm_password))
{
validate_message.append("两次密码输入不一致");
}
if(agree == null) {
validate_message.append("请阅读《中国铁路客户服务中心网站服务条款》并勾选");
}
if(validate_message.length()>0)
{
System.out.println(validate_message.toString());
return validate_message;
}
return validate_message;
}
}
以上就是我对于Md5加密密码使用的总结
分割线
相关信息
以上就是我关于 Java-使用MD5对密码进行加密 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。
Powered by Waline v2.15.4