15 个解决方案
#1
#2
随便自己创造的
比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。
最多的解密技术还是调用java的MD5,不过MD5不能解密的。
比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。
最多的解密技术还是调用java的MD5,不过MD5不能解密的。
#3
写错了 是最多的加密技术不是解密技术
#4
有个开源组件不错,jasypt,一个简单的加密解密示例:
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword); //设置密码
String myEncryptedText = textEncryptor.encrypt(myText); //加密
...
String plainText = textEncryptor.decrypt(myEncryptedText); //解密
具体可以查看官网 http://www.jasypt.org/
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword); //设置密码
String myEncryptedText = textEncryptor.encrypt(myText); //加密
...
String plainText = textEncryptor.decrypt(myEncryptedText); //解密
具体可以查看官网 http://www.jasypt.org/
#5
数据库里保存密码的 MD5 码(参见
java.security.MessageDigest),登录时拿提交过来的密码计算其 MD5 码然后跟数据库的比较。
#6
根本没必要解密。
#7
请问楼上的sagezk,那修改密码怎么办?
#8
我是用的oracle数据库,它本身有个加密的函数,所以我是用它做的
#9
如果老密码输入正确就拿新密码的 MD5 替代老密码的 MD5 存入数据库。
#10
可以,但不灵活,一旦数据库换了(不是所有数据库都有加密解密存储函数),你的加密功能就用不了了。
#11
md5()
#12
呵呵!~
兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。
我是按照MVC模式写的:
加密部分(网上有,我稍作改动):
《JAVA上加密算法的实现用例》原文地址:
http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。
md5reg.java
控制器(Servlet)Loginhandle.java代码:
视图、模型Bean就不用发了吧?用IDE之类的工具很快就写成了。
我的还加了验证码。代码太多了,还有注册模块。这里就发这么多吧。感兴趣的在我空间里留言,留下E-mail
兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。
我是按照MVC模式写的:
加密部分(网上有,我稍作改动):
《JAVA上加密算法的实现用例》原文地址:
http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。
md5reg.java
package 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
#13
密码加密后的效果图:
#14
thank you !
#15
tdy218可以给我发一下全部的代码吗?我是初学者,请多多关照。。。。
我的邮箱:haoibm@163.com
我的邮箱:haoibm@163.com
#1
#2
随便自己创造的
比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。
最多的解密技术还是调用java的MD5,不过MD5不能解密的。
比如你可以把密码getbyte(),再把byte数值前后倒置,就生成了新密码。解密就做相反的操作。
最多的解密技术还是调用java的MD5,不过MD5不能解密的。
#3
写错了 是最多的加密技术不是解密技术
#4
有个开源组件不错,jasypt,一个简单的加密解密示例:
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword); //设置密码
String myEncryptedText = textEncryptor.encrypt(myText); //加密
...
String plainText = textEncryptor.decrypt(myEncryptedText); //解密
具体可以查看官网 http://www.jasypt.org/
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword); //设置密码
String myEncryptedText = textEncryptor.encrypt(myText); //加密
...
String plainText = textEncryptor.decrypt(myEncryptedText); //解密
具体可以查看官网 http://www.jasypt.org/
#5
数据库里保存密码的 MD5 码(参见
java.security.MessageDigest),登录时拿提交过来的密码计算其 MD5 码然后跟数据库的比较。
#6
根本没必要解密。
#7
请问楼上的sagezk,那修改密码怎么办?
#8
我是用的oracle数据库,它本身有个加密的函数,所以我是用它做的
#9
如果老密码输入正确就拿新密码的 MD5 替代老密码的 MD5 存入数据库。
#10
可以,但不灵活,一旦数据库换了(不是所有数据库都有加密解密存储函数),你的加密功能就用不了了。
#11
md5()
#12
呵呵!~
兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。
我是按照MVC模式写的:
加密部分(网上有,我稍作改动):
《JAVA上加密算法的实现用例》原文地址:
http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。
md5reg.java
控制器(Servlet)Loginhandle.java代码:
视图、模型Bean就不用发了吧?用IDE之类的工具很快就写成了。
我的还加了验证码。代码太多了,还有注册模块。这里就发这么多吧。感兴趣的在我空间里留言,留下E-mail
兄弟,这个问题我换可以说点。正如6楼说的没必要解密。验证一下就可以了。
我是按照MVC模式写的:
加密部分(网上有,我稍作改动):
《JAVA上加密算法的实现用例》原文地址:
http://www.ibm.com/developerworks/cn/java/l-security/ 牛人写的。我这个就是改编自他写的。
md5reg.java
package 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
#13
密码加密后的效果图:
#14
thank you !
#15
tdy218可以给我发一下全部的代码吗?我是初学者,请多多关照。。。。
我的邮箱:haoibm@163.com
我的邮箱:haoibm@163.com