MD5验证用户登陆密码

网络上带给我们很多便捷,同时也出现很多问题,如安全。有时候很多网站对于用户信息没有进行加密处理,导致数据库泄露后用户的信息也被曝光,如此一来便引起用户很大的不便。之前做过一个简单的登陆验证,现在把MD5加密加入登陆验证里面。

    我的具体思路是这样的。这里只做简单的加密验证,只对用户密码进行加密。首先用户注册的时候在我们获取到密码明文,然后调用MD5类中getMD5()方法,此方法是将明文转化为密文的关键算法(关于MD5算法大家可以在网上查询到资料),明文经过getMD5()方法处理后函数返回密文字符串。然后再将密文存入数据库,如此一来即使数据库被人拿到他也无法获取到用户密码,因此可以说用户安全性得到了大大的提高(如admin经过getMD5处理后得到的是21232f297a57a5a743894a0e4a801fc3)

关于验证方法其实也很简单,只要围绕着密文这个关键就行,比如用户输入账号admin密码123456,但是数据库存的数据却不是123456而是他的密文,所以我们先写个方法check()校验用户正确的方法,这个方法需要传入两个参数,username和password(这两个参数就是从网页传来,用户输入的内容);首先根据用户传来的账号admin对数据库进行查找,找到admin对应的密码的密文设为X,然后把用户传来的密码根据getMD5()方法获取到期MD5码,我们需要比较的就是这个MD5码。简单点说就是把数据库密码的密文X来和用户传来的密码的密文相比较就行了。

下面贴上关键代码:

getConnection()方法的代码(获取数据库连接):

publicclass JdbcUtil {

privatestaticfinal String className="com.mysql.jdbc.Driver";

privatestaticfinal String url="jdbc:mysql://localhost:3306/test";

privatestaticfinal String user="root";

privatestaticfinal String password="root";

privatestatic Connection conn; 

privatestatic Statement st;

publicstatic Connection getConnection()

{

try {

Class.forName(className);

} catch (ClassNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

conn=DriverManager.getConnection(url, user, password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

returnconn;

}

}

getMD5()的代码(MD5加密):

Package www.mwcly.cn

publicfinalstatic String getMD5(String s) {

char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'a', 'b', 'c', 'd', 'e', 'f' };

try {

byte[] strTemp = s.getBytes();

// 使用MD5创建MessageDigest对象

   MessageDigest mdTemp = MessageDigest.getInstance("MD5");

   mdTemp.update(strTemp);

byte[] md = mdTemp.digest();

int j = md.length;

char str[] = newchar[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte b = md[i];

//System.out.println((int)b);

// 将没个数(int)b进行双字节加密

    str[k++] = hexDigits[b >> 4 & 0xf];

    str[k++] = hexDigits[b & 0xf];

   }

returnnew String(str);

  } catch (Exception e) {

returnnull;

  }

 }

check()方法代码(校验用户登录):

publicboolean check(String username,String password) {

// TODO Auto-generated method stub

//先把得到的密码转化成MD5码  用mdpass保存  

String mdpass=MD5.getMD5(password);

String pass="";

conn=JdbcUtil.getConnection();

  String sql="select password from admin where username ='"+username+"'";  

try {  

st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量   

            ResultSet rs = st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集   

while (rs.next()) { // 判断是否还有下一个数据   

// 根据字段名获取相应的值   

                pass=rs.getString("password");

            }  

conn.close();   //关闭数据库连接   

        } catch (SQLException e) {  

           System.out.println("查询数据失败");  

        }  

//输出查到的值www.huaihua365.net与之前MD5码比较  

if(pass.equals(mdpass)){

returntrue;

              } else

returnfalse;

    }  

世界那么大,代码连接你我他,凭借代码走天下,依靠代码撑起家
原文地址:https://www.cnblogs.com/HKKILL/p/5593097.html