密码数据MD5加密
密码数据MD5加密
一、程序说明
1.数据库 MySQL
2.JQuery表单验证
3.开发环境:win7+tomcat6+myeclipse9.0
二、基本流程图
三、运行界面
1.注册界面
2.表单验证
3.提交注册信息
4.数据库信息
四、程序主要代码
1.MD5类
public class Md5 { public final static String getMD5(String str){ try { MessageDigest md = MessageDigest.getInstance("MD5"); //创建具有指定算法名称的摘要 md.update(str.getBytes()); //使用指定的字节数组更新摘要 byte mdBytes[] = md.digest(); //进行哈希计算并返回一个字节数组 String hash = ""; for(int i= 0;i<mdBytes.length;i++){ //循环字节数组 int temp; if(mdBytes[i]<0) //如果有小于0的字节,则转换为正数 temp =256+mdBytes[i]; else temp=mdBytes[i]; if(temp<16) hash+= "0"; hash+=Integer.toString(temp,16); //将字节转换为16进制后,转换为字符串 } return hash; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } }
2.UserDao类
UserDao
1 publicclass UserDao {
2 privatestatic UserDao instance =null;
3 /**
4 * 返回一个UserDao实例
5 * @return
6 */
7 publicstatic UserDao getInstance(){
8 if(instance==null) instance =new UserDao();
9 return instance;
10 }
11
12 publicboolean checkname(User user){
13 Connection con =null;
14 try{
15 con = DBCon.getConn(); //创建数据库连接
16 String sql ="select count(id) as count from tb_user where name=?";
17 PreparedStatement pstmt = con.prepareStatement(sql);
18 pstmt.setString(1, user.getUserName()); //对SQL语句第1个参数赋值
19 ResultSet rs = pstmt.executeQuery();
20 if(rs.next()) {
21 if(rs.getInt("count")==0){
22 returntrue;
23 }
24 }
25 }catch(Exception ex){
26 ex.printStackTrace();
27 }finally{
28 try {
29 con.close();
30 } catch (SQLException e) {
31 e.printStackTrace();
32 }
33 }
34 returnfalse;
35 }
36
37 /**
38 * 保存用户注册信息
39 * @param user
40 * @return
41 */
42
43 publicboolean saveUser(User user){
44 Connection con =null;
45 try{
46 con = DBCon.getConn(); //创建数据库连接
47 String sql ="insert into tb_user(name,pwd,sex,age,createTime) values(?,?,?,?,?)";
48 PreparedStatement pstmt = con.prepareStatement(sql);//预编译insert语句
49 pstmt.setString(1, user.getUserName()); //对SQL语句第1个参数赋值
50 pstmt.setString(2, user.getUserPwd()); //对SQL语句第2个参数赋值
51 pstmt.setString(3, user.getUserSex()); //对SQL语句第3个参数赋值
52 pstmt.setInt(4, user.getUserAge()); //对SQL语句第4个参数赋值
53 pstmt.setString(5, user.getUserLoginTime()); //对SQL语句第5个参数赋值
54 int row = pstmt.executeUpdate(); //执行插入操作并返回所影响的行数
55 if(row==1)
56 returntrue; //数据插入成功返回true
57 }catch(Exception ex){
58 ex.printStackTrace();
59 }finally{
60 try {
61 con.close();
62 } catch (SQLException e) {
63 e.printStackTrace();
64 }
65 }
66 returnfalse;
67 }
68
69 }
2 privatestatic UserDao instance =null;
3 /**
4 * 返回一个UserDao实例
5 * @return
6 */
7 publicstatic UserDao getInstance(){
8 if(instance==null) instance =new UserDao();
9 return instance;
10 }
11
12 publicboolean checkname(User user){
13 Connection con =null;
14 try{
15 con = DBCon.getConn(); //创建数据库连接
16 String sql ="select count(id) as count from tb_user where name=?";
17 PreparedStatement pstmt = con.prepareStatement(sql);
18 pstmt.setString(1, user.getUserName()); //对SQL语句第1个参数赋值
19 ResultSet rs = pstmt.executeQuery();
20 if(rs.next()) {
21 if(rs.getInt("count")==0){
22 returntrue;
23 }
24 }
25 }catch(Exception ex){
26 ex.printStackTrace();
27 }finally{
28 try {
29 con.close();
30 } catch (SQLException e) {
31 e.printStackTrace();
32 }
33 }
34 returnfalse;
35 }
36
37 /**
38 * 保存用户注册信息
39 * @param user
40 * @return
41 */
42
43 publicboolean saveUser(User user){
44 Connection con =null;
45 try{
46 con = DBCon.getConn(); //创建数据库连接
47 String sql ="insert into tb_user(name,pwd,sex,age,createTime) values(?,?,?,?,?)";
48 PreparedStatement pstmt = con.prepareStatement(sql);//预编译insert语句
49 pstmt.setString(1, user.getUserName()); //对SQL语句第1个参数赋值
50 pstmt.setString(2, user.getUserPwd()); //对SQL语句第2个参数赋值
51 pstmt.setString(3, user.getUserSex()); //对SQL语句第3个参数赋值
52 pstmt.setInt(4, user.getUserAge()); //对SQL语句第4个参数赋值
53 pstmt.setString(5, user.getUserLoginTime()); //对SQL语句第5个参数赋值
54 int row = pstmt.executeUpdate(); //执行插入操作并返回所影响的行数
55 if(row==1)
56 returntrue; //数据插入成功返回true
57 }catch(Exception ex){
58 ex.printStackTrace();
59 }finally{
60 try {
61 con.close();
62 } catch (SQLException e) {
63 e.printStackTrace();
64 }
65 }
66 returnfalse;
67 }
68
69 }
3.js(表单验证)
check
1 $(document).ready(function(){
2
3 $("form :input.required").each(function(){
4 var $required = $("<strong class='high'> *</strong>");
5 $(this).parent().append($required);
6 });
7
8 //重置操作
9 $("#res").click(function(){
10 $(".formtips").remove();
11 });
12
13 $('form :input').blur(function(){
14 var $parent = $(this).parent();
15
16 $parent.find(".formtips").remove();
17 //验证账户
18 if($(this).is('#username')){
19
20 if(this.value ==""||this.value.length <3){
21 var Msg ="<font color=red>账户名最短不能小于三位<font>";
22 $parent.append('<span class = "formtips onError">'+ Msg+'</span>');
23 }else{
24 var username=$("#username").val();
25 $.ajax({
26 type:"post",
27 url:"check.jsp?type=name",
28 data:{username:username},
29 success:function(data,textStatus){
30 if(data[0].success=="success"){
31 var Msg ="<font color=green>恭喜你,该用户名尚未被注册!</font>";
32 $parent.append('<span class="formtips onSuccess">'+Msg +'</span>');
33
34 }else{
35 var Msg="<font color=red>用户名已经存在,请重新输入!</font>";
36 $parent.append('<span class="formtips onError">'+Msg +'</span>');
37 }
38
39 },
40 error: function(data, textStatus) {
41 }
42 });
43 }
44 }
45 //验证密码
46 if($(this).is('#userpwd1')){
47 if(this.value ==""||this.value.length<6){
48 var errorMsg ="<font color=red>密码最短不能小于6位<font>";
49 $parent.append('<span class = "formtips onError">'+ errorMsg+'</span>');
50 }else {
51 var okMsg ="<font color=green>输入符合格式<font>";
52 $parent.append('<span class="formtips onSuccess">'+okMsg +'</span>');
53 }
54 }
55 //验证确认密码
56 //2011/04/30 叶茂安修改
57 if($(this).is('#userpwd2')){
58 if($(this).val() == $("#userpwd1").val() &&this.value !="" ){
59 var Msg ="<font color=green>密码输入正确</font>";
60 $parent.append('<span class = "formtips onSuccess">'+ Msg+'</span>');
61 }
62 else {
63 var Msg ="<font color=red>请确认两次输入一致且不为空</font>";
64 $parent.append('<span class="formtips onError">'+Msg +'</span>');
65 }
66 }
67 });
68
69
70 $("#send").click(function(){
71 var username=$("#username").val();
72 var userpwd=$("#userpwd1").val();
73 var userage=$("#userage").val();
74 var usersex=$("#usersex").find("option:selected").text();
75 $.ajax({
76 type:"post",
77 url:"saveuser.jsp",
78 contentType: "application/x-www-form-urlencoded; charset=utf-8",
79 cache: true,
80 data:{ username:username,userpwd:userpwd,userage:userage,usersex:usersex},
81 success:function(data,textStatus){
82 if(data[0].success=="success"){
83 var Msg ="success!";
84 }else{
85 var Msg="failure!";
86 }
87 alert(Msg);
88 },
89 error: function(data, textStatus) {
90 }
91 });
92 });
93 });
2
3 $("form :input.required").each(function(){
4 var $required = $("<strong class='high'> *</strong>");
5 $(this).parent().append($required);
6 });
7
8 //重置操作
9 $("#res").click(function(){
10 $(".formtips").remove();
11 });
12
13 $('form :input').blur(function(){
14 var $parent = $(this).parent();
15
16 $parent.find(".formtips").remove();
17 //验证账户
18 if($(this).is('#username')){
19
20 if(this.value ==""||this.value.length <3){
21 var Msg ="<font color=red>账户名最短不能小于三位<font>";
22 $parent.append('<span class = "formtips onError">'+ Msg+'</span>');
23 }else{
24 var username=$("#username").val();
25 $.ajax({
26 type:"post",
27 url:"check.jsp?type=name",
28 data:{username:username},
29 success:function(data,textStatus){
30 if(data[0].success=="success"){
31 var Msg ="<font color=green>恭喜你,该用户名尚未被注册!</font>";
32 $parent.append('<span class="formtips onSuccess">'+Msg +'</span>');
33
34 }else{
35 var Msg="<font color=red>用户名已经存在,请重新输入!</font>";
36 $parent.append('<span class="formtips onError">'+Msg +'</span>');
37 }
38
39 },
40 error: function(data, textStatus) {
41 }
42 });
43 }
44 }
45 //验证密码
46 if($(this).is('#userpwd1')){
47 if(this.value ==""||this.value.length<6){
48 var errorMsg ="<font color=red>密码最短不能小于6位<font>";
49 $parent.append('<span class = "formtips onError">'+ errorMsg+'</span>');
50 }else {
51 var okMsg ="<font color=green>输入符合格式<font>";
52 $parent.append('<span class="formtips onSuccess">'+okMsg +'</span>');
53 }
54 }
55 //验证确认密码
56 //2011/04/30 叶茂安修改
57 if($(this).is('#userpwd2')){
58 if($(this).val() == $("#userpwd1").val() &&this.value !="" ){
59 var Msg ="<font color=green>密码输入正确</font>";
60 $parent.append('<span class = "formtips onSuccess">'+ Msg+'</span>');
61 }
62 else {
63 var Msg ="<font color=red>请确认两次输入一致且不为空</font>";
64 $parent.append('<span class="formtips onError">'+Msg +'</span>');
65 }
66 }
67 });
68
69
70 $("#send").click(function(){
71 var username=$("#username").val();
72 var userpwd=$("#userpwd1").val();
73 var userage=$("#userage").val();
74 var usersex=$("#usersex").find("option:selected").text();
75 $.ajax({
76 type:"post",
77 url:"saveuser.jsp",
78 contentType: "application/x-www-form-urlencoded; charset=utf-8",
79 cache: true,
80 data:{ username:username,userpwd:userpwd,userage:userage,usersex:usersex},
81 success:function(data,textStatus){
82 if(data[0].success=="success"){
83 var Msg ="success!";
84 }else{
85 var Msg="failure!";
86 }
87 alert(Msg);
88 },
89 error: function(data, textStatus) {
90 }
91 });
92 });
93 });
4.saveuser.jsp
saveuser.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2 <%@ page import="java.util.*"%>
3 <%@ page import="com.swyma.md5.model.*"%>
4 <%@ page import="com.swyma.md5.util.*"%>
5 <%@ page import="com.swyma.md5.dao.*"%>
6
7 <% response.setHeader("Content-Type","text/json"); %>
8 <%
9
10 request.setCharacterEncoding("utf-8");
11 String userName = request.getParameter("username"); //用户名
12 String userPwd = request.getParameter("userpwd"); //用户密码
13 String userAge = request.getParameter("userage"); //用户年龄
14 int age=0;
15 if(userAge!=null&&!userAge.equals("")){
16 age=Integer.parseInt(userAge); //转换为int值
17 }
18 String userSex = request.getParameter("usersex"); //用户性别
19 if(userSex.equals("男")){
20 userSex="male";
21 }elseif(userSex.equals("女")){
22 userSex="female";
23 }
24 //System.out.println(userName+" "+userPwd+" "+userSex+" "+userAge);
25 User user =new User(); //创建用户信息对象,将注册信息封装
26 user.setUserName(userName.trim());
27 user.setUserPwd(Md5.getMD5(userPwd)); //密码加密后封装到User对象中
28 user.setUserAge(age);
29 user.setUserSex(userSex);
30 //获取当前系统时间的字符串格式
31 String time = CalendarUtil.getParticularDateTime(Calendar.getInstance());
32 user.setUserLoginTime(time);
33 boolean res=UserDao.getInstance().saveUser(user); //保存注册信息
34 if(res){
35 response.getWriter().write("[{\"success\":\"success\"}]");
36 }else{
37 response.getWriter().write("[{\"success\":\"failure\"}]");
38 }
39 %>
2 <%@ page import="java.util.*"%>
3 <%@ page import="com.swyma.md5.model.*"%>
4 <%@ page import="com.swyma.md5.util.*"%>
5 <%@ page import="com.swyma.md5.dao.*"%>
6
7 <% response.setHeader("Content-Type","text/json"); %>
8 <%
9
10 request.setCharacterEncoding("utf-8");
11 String userName = request.getParameter("username"); //用户名
12 String userPwd = request.getParameter("userpwd"); //用户密码
13 String userAge = request.getParameter("userage"); //用户年龄
14 int age=0;
15 if(userAge!=null&&!userAge.equals("")){
16 age=Integer.parseInt(userAge); //转换为int值
17 }
18 String userSex = request.getParameter("usersex"); //用户性别
19 if(userSex.equals("男")){
20 userSex="male";
21 }elseif(userSex.equals("女")){
22 userSex="female";
23 }
24 //System.out.println(userName+" "+userPwd+" "+userSex+" "+userAge);
25 User user =new User(); //创建用户信息对象,将注册信息封装
26 user.setUserName(userName.trim());
27 user.setUserPwd(Md5.getMD5(userPwd)); //密码加密后封装到User对象中
28 user.setUserAge(age);
29 user.setUserSex(userSex);
30 //获取当前系统时间的字符串格式
31 String time = CalendarUtil.getParticularDateTime(Calendar.getInstance());
32 user.setUserLoginTime(time);
33 boolean res=UserDao.getInstance().saveUser(user); //保存注册信息
34 if(res){
35 response.getWriter().write("[{\"success\":\"success\"}]");
36 }else{
37 response.getWriter().write("[{\"success\":\"failure\"}]");
38 }
39 %>
5.数据库(mysql)
tb_user
1 DROPTABLEIFEXISTS `md5`.`tb_user`;
2 CREATETABLE `md5`.`tb_user` (
3 `id` int(11) NOTNULL AUTO_INCREMENT,
4 `name` varchar(20) NOTNULL,
5 `pwd` varchar(40) NOTNULL,
6 `sex` varchar(5) NOTNULL,
7 `age` int(11) NOTNULL,
8 `createTime` datetimeNOTNULL,
9 PRIMARYKEY (`id`)
10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 CREATETABLE `md5`.`tb_user` (
3 `id` int(11) NOTNULL AUTO_INCREMENT,
4 `name` varchar(20) NOTNULL,
5 `pwd` varchar(40) NOTNULL,
6 `sex` varchar(5) NOTNULL,
7 `age` int(11) NOTNULL,
8 `createTime` datetimeNOTNULL,
9 PRIMARYKEY (`id`)
10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、个人总结
1.因为从来没有接触正式的项目,所以很少考虑到用户注册密码加密,这次是在网上看了一些信息才发觉这些密码数据之类的东西确实有必要进行加密。这样才能在一定程序上解决数据保密问题。
2.不过在做这个小例子时还是遇到一些没有解决的问题:
1)这个md5加密,因为在数据库里还是明码显示出生成的md5字符,假如其它用户发现取到了这个md5数据,是不是能很快的对它进行破密呢?
2)是不是有更好的数据加密方法对密码进行加密呢?
出处: http://www.cnblogs.com/maoan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。