java如何给密码加密和解密 ? 求助!!有哪位能帮我解决这个问题?小弟在这里谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【wanghongyu243】截止到2008-07-26 14:12:08的历史汇总数据(不包括此帖):发帖的总数量:0 发帖的总分数:0 每贴平均分数:0 回帖的总数量:0 得分贴总数量:0 回帖的得分率:0% 结贴的总数量:0 结贴的总分数:0 无满意结贴数:0 无满意结贴分:0 未结的帖子数:0 未结的总分数:0 结贴的百分比:---------------------结分的百分比:---------------------无满意结贴率:---------------------无满意结分率:---------------------如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html 随便自己创造的比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。最多的解密技术还是调用java的MD5,不过MD5不能解密的。 有个开源组件不错,jasypt,一个简单的加密解密示例:BasicTextEncryptor textEncryptor = new BasicTextEncryptor();textEncryptor.setPassword(myEncryptionPassword); //设置密码String myEncryptedText = textEncryptor.encrypt(myText); //加密...String plainText = textEncryptor.decrypt(myEncryptedText); //解密具体可以查看官网http://www.jasypt.org/ 数据库里保存密码的 MD5 码(参见 java.security.MessageDigest),登录时拿提交过来的密码计算其 MD5 码然后跟数据库的比较。 请问楼上的sagezk,那修改密码怎么办? 我是用的oracle数据库,它本身有个加密的函数,所以我是用它做的 如果老密码输入正确就拿新密码的 MD5 替代老密码的 MD5 存入数据库。 呵呵!~兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。我是按照MVC模式写的:加密部分(网上有,我稍作改动):《JAVA上加密算法的实现用例》原文地址:http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。md5reg.javapackage tdy218.md5;import java.security.*;public class md5reg{ byte[] digest;String tmp="",has=""; public String hasString(String password) //这里作了修改 {try { MessageDigest md5 = MessageDigest.getInstance("MD5"); //SHA-1跟MD5写法上差不多。 md5.update(password.getBytes()); // 添加要计算的摘要信息 digest = md5.digest(); } catch(NoSuchAlgorithmException e) { System.out.println("非法摘要算法!"+e.getMessage()); } for(int i=0;i<digest.length;i++) { tmp=(Integer.toHexString(digest[i] & 0XFF)); if(tmp.length()==1) has=has+i+tmp; //这里也做了修改 else has=has+tmp; if(i<digest.length-1) has=has+i; //这里又做了修改 } return has.toUpperCase(); }}控制器(Servlet)Loginhandle.java代码:package tdy218.md5;import tdy218.md5.md5reg;import tdy218.md5.Loginbean;import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;public class Loginhandle extends HttpServlet{public void init(ServletConfig config) throws ServletException { super.init(config); }public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=gbk"); HttpSession session = request.getSession(true); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; md5reg md5 = new md5reg(); Loginbean login = new Loginbean(); request.setAttribute("land",login); PrintWriter show = response.getWriter(); String username = request.getParameter("username").trim(); String password = request.getParameter("password").trim(); String checkcode = request.getParameter("checkcode").trim(); String rand = (String)session.getAttribute("rand"); if(username==null||username.equals("")) { show.print("<script language=javascript>alert('用户名不能为空!~');"); show.print("history.go(-1);</script>"); } else if(password==null||password.equals("")) { show.print("<script language=javascript>alert('请输入密码!~');"); show.print("history.go(-1);</script>"); } else if(checkcode==null||checkcode.equals("")) { show.print("<script language=javascript>alert('请输入验证码!~');"); show.print("history.go(-1);</script>"); } else if(checkcode.equals(rand)==false) { show.print("<script language=javascript>alert('你输入的验证码有误,请重新输入!~');"); show.print("history.go(-1);</script>"); } else { try { String md5pwd = md5.hasString(password); Class.forName("com.mysql.jdbc.Driver").newInstance(); String uri = "jdbc:mysql://127.0.0.1:3306/admin?characterEncoding=utf-8"; con = DriverManager.getConnection(uri,"root","soft"); String sql = "select username,password from md5landing where username=?"; ps = con.prepareStatement(sql); ps.setString(1,username); //防止SQLInjection方法之一,功能正在加强。这几天正在做URL过滤,做好了我发到博客里。感兴趣的留一下喽。 rs = ps.executeQuery(); while(rs.next()) { String pwd = rs.getString("password"); if(pwd.equals(md5pwd)) { login.SetUsername(username); login.SetPassword(password); login.SetMd5pwd(md5pwd); RequestDispatcher dispatcher = request.getRequestDispatcher("loginresult.jsp");//转发 dispatcher.forward(request,response); } else { show.print("<script language=javascript>alert('用户不存在或密码错误,请重新输入!~');"); show.print("history.go(-1);</script>"); } } ps.close(); con.close(); } catch(Exception e) { show.print("发生异常:"+e.getMessage()); //show.print("<script language=javascript>alert('发生异常,请联系网站管理员!~');"); //show.print("history.go(-1);</script>"); } }//else语句的结尾。 }//doPost方法的结尾。 public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doPost(request,response); }}视图、模型Bean就不用发了吧?用IDE之类的工具很快就写成了。我的还加了验证码。代码太多了,还有注册模块。这里就发这么多吧。感兴趣的在我空间里留言,留下E-mail tdy218可以给我发一下全部的代码吗?我是初学者,请多多关照。 FROM使用enctype="multipart/form-data"属性后,后台获得null值。 myeslipse里加入jquery-1.6.4.js无效 已经获得了字节数组,如何使用itext,把该字节数组生成pdf JS中如何获取服务器时间 多选列表框中,如何触发双击事件 web.xml到底要怎么配置啊~!~!~! JSP初鸟提问。一百分马上就结算 请教:关于JAVA“函数参数传递” 我快被搞疯了:高分求解,可以再加 求jbuilder的电子书,最好是中文的? Struts1.2和Struts1.3有什么区别??? width,height为多少px时,A4纸打印时刚好一页
楼主【wanghongyu243】截止到2008-07-26 14:12:08的历史汇总数据(不包括此帖):
发帖的总数量:0 发帖的总分数:0 每贴平均分数:0
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。最多的解密技术还是调用java的MD5,不过MD5不能解密的。
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword); //设置密码
String myEncryptedText = textEncryptor.encrypt(myText); //加密
...
String plainText = textEncryptor.decrypt(myEncryptedText); //解密具体可以查看官网http://www.jasypt.org/
如果老密码输入正确就拿新密码的 MD5 替代老密码的 MD5 存入数据库。
兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。
我是按照MVC模式写的:加密部分(网上有,我稍作改动):
《JAVA上加密算法的实现用例》原文地址:
http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。md5reg.javapackage tdy218.md5;
import java.security.*;public class md5reg
{
byte[] digest;String tmp="",has="";
public String hasString(String password) //这里作了修改
{
try {
MessageDigest md5 = MessageDigest.getInstance("MD5"); //SHA-1跟MD5写法上差不多。
md5.update(password.getBytes()); // 添加要计算的摘要信息
digest = md5.digest();
}
catch(NoSuchAlgorithmException e)
{
System.out.println("非法摘要算法!"+e.getMessage());
}
for(int i=0;i<digest.length;i++)
{
tmp=(Integer.toHexString(digest[i] & 0XFF));
if(tmp.length()==1)
has=has+i+tmp; //这里也做了修改
else
has=has+tmp;
if(i<digest.length-1)
has=has+i; //这里又做了修改
}
return has.toUpperCase();
}}
控制器(Servlet)Loginhandle.java代码:package tdy218.md5;import tdy218.md5.md5reg;
import tdy218.md5.Loginbean;import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;public class Loginhandle extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html;charset=gbk");
HttpSession session = request.getSession(true);
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
md5reg md5 = new md5reg();
Loginbean login = new Loginbean();
request.setAttribute("land",login);
PrintWriter show = response.getWriter();
String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();
String checkcode = request.getParameter("checkcode").trim();
String rand = (String)session.getAttribute("rand");
if(username==null||username.equals(""))
{
show.print("<script language=javascript>alert('用户名不能为空!~');");
show.print("history.go(-1);</script>");
}
else if(password==null||password.equals(""))
{
show.print("<script language=javascript>alert('请输入密码!~');");
show.print("history.go(-1);</script>");
}
else if(checkcode==null||checkcode.equals(""))
{
show.print("<script language=javascript>alert('请输入验证码!~');");
show.print("history.go(-1);</script>");
}
else if(checkcode.equals(rand)==false)
{
show.print("<script language=javascript>alert('你输入的验证码有误,请重新输入!~');");
show.print("history.go(-1);</script>");
}
else
{
try
{
String md5pwd = md5.hasString(password);
Class.forName("com.mysql.jdbc.Driver").newInstance();
String uri = "jdbc:mysql://127.0.0.1:3306/admin?characterEncoding=utf-8";
con = DriverManager.getConnection(uri,"root","soft");
String sql = "select username,password from md5landing where username=?";
ps = con.prepareStatement(sql);
ps.setString(1,username);
//防止SQLInjection方法之一,功能正在加强。这几天正在做URL过滤,做好了我发到博客里。感兴趣的留一下喽。
rs = ps.executeQuery();
while(rs.next())
{
String pwd = rs.getString("password");
if(pwd.equals(md5pwd))
{
login.SetUsername(username);
login.SetPassword(password);
login.SetMd5pwd(md5pwd);
RequestDispatcher dispatcher = request.getRequestDispatcher("loginresult.jsp");//转发
dispatcher.forward(request,response);
}
else
{
show.print("<script language=javascript>alert('用户不存在或密码错误,请重新输入!~');");
show.print("history.go(-1);</script>");
}
}
ps.close();
con.close();
}
catch(Exception e)
{
show.print("发生异常:"+e.getMessage());
//show.print("<script language=javascript>alert('发生异常,请联系网站管理员!~');");
//show.print("history.go(-1);</script>");
}
}//else语句的结尾。 }//doPost方法的结尾。
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
doPost(request,response);
}
}视图、模型Bean就不用发了吧?用IDE之类的工具很快就写成了。
我的还加了验证码。代码太多了,还有注册模块。这里就发这么多吧。感兴趣的在我空间里留言,留下E-mail