安全中国首页 > 编程中心 > JSP编程
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

JSP:MD5摘要计算[1]

更新时间:2008-7-2 15:24:04
责任编辑:ShellExp
热 点:

在JSP程序中,用MD5算法的常用之处就是对用户登录密码的加密和验证了。在数据库中,存放系统用户信息的用户表中常常会有用户登录密码这个字段,如果不对密码作加密处理,放在这个字段中的密码就会是明文,只要能打开数据库并拥有对用户表的查询权限,就可以直接看到用户的登录密码,这样是不够安全的。为解决这个问题,可以采用MD5算法来对密码计算摘要,然后把计算后的摘要存放到密码字段中,那么在数据库的用户表中查看到的就不是明文了。

  MD5算法并不是对数据的加密处理,而是对数据采用MD5算法来记录数据特征(称为摘要)的一段字符串,对于同一个数据,计算出来的摘要是相同的。因此,在用户注册时,就在用户表的密码字段存放根据密码数据用MD5算法计算出来的摘要;在下次登录时,根据用户输入的密码作MD5算法计算摘要处理,如果计算出来的摘要与用户表中存放的摘要相同,则表示密码正确。

  一般来说,不管要传递的数据有多长,计算出来的摘要总是16或20个字节长。JDK中已带有目前比较成熟的计算摘要的算法,如MD5、SHA等。下面来看MD5计算摘要是如何实现的。

  【实例140】  为登录密码计算MD5摘要
  本例的思路如下:在用户注册时就为用户输入的密码计算MD5摘要,并存入数据库的用户表中;在用户登录时再根据输入的密码计算摘要,并与数据库中用户表的这个用户的摘要作对比,如果相同则通过验证。

  本例将继续使用第7章实例51“向用户表中插入记录”中的源代码insertUserTable.jsp和acceptInsertUserTable.jsp,并稍作修改。insertUserTable.jsp页面的代码无须修改,acceptInsertUserTable.jsp页面的首部语句改为:
<%@ page import="java.sql.*,java.security.MessageDigest" %>

  这里导入了java.security.MessageDigest类,这个类可用来使用MD5算法计算的实例对象,并作MD5计算。在接收输入password(用户密码)参数时,接收参数的语句修改为如下:
  String password=codeToString(request.getParameter("password"));
  if(password==null)//无内容则设为空串
    password="";
  //为密码计算摘要
  try{
  //------生成MessageDigest对象MD------
  MessageDigest MD=MessageDigest.getInstance("MD5");
  //------传入要计算的字符串------
  MD.update(password.getBytes("UTF8"));
  //------计算消息摘要------
  byte[] passwordMD5Byte=MD.digest();
  password=new String(passwordMD5Byte);
  }catch(Exception e){
  e.printStackTrace();
  }

  下面来看登录页面的代码:
  login.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <html>
    <head><title>登录页面</title></head>
   <body>
   <table align="center" border="0">
    <tr align="center"><td><font   color="red"><html:errors/></font></td></tr>
    <tr align="center"><td>系统登录</td></tr>
    <form action="loginCheck.jsp" method="post" focus="username">
    <tr><td>用户名:<input type="text" name="username"/></td></tr>
  <tr><td>密&nbsp;&nbsp;码:<inputtype="password"name="password"/></td></tr>
      <tralign="right"><td><inputtype="submit"value="确定"/></td></tr>
      </form>
     </table>
    </body>
   </html>

 
学习软件编程开发技术,推荐加入以下软件编程培训班:
易语言软件编程培训班(简单易学)  Delphi软件编程培训班  VC++软件编程培训班
VB软件编程培训班  JAVA高端编程就业研发班

学习网站开发制作技术,推荐加入以下网站开发培训班:
ASP.net网站开发项目实战班  ASP语言网站建设培训班

学习网络安全入侵防护技术,推荐加入以下技术培训班:
大型网络安全入侵防护班  网站脚本程序全方位安全检测班

学习网络管理、网吧运营维护技术(网管),推荐加入以下培训班:
大型网吧技术管理人才特训班  Linux网络嵌入架构工程师培训班

学习专项特殊技术,推荐加入以下专项技术培训班:
软件与游戏外挂脱壳破解班(逆向工程)  赚钱王道-网赚技能培训班  Flash动画设计师就业特训班

 
相关编程
一日一文章
 
一日一软件
一日一动画