用户名和密码的MD5加密整理。
项目中遇到了要求加密,从网上找了些文章,整理了一下,备用。
js加密(转)
http://download1.csdn.net/down3/20070604/04115829609.rar
java:
import java.security.MessageDigest;
public class MD5Test {
public final static String md5(String s) {
String strOutput = new String("");
try {
byte[] strtemp = s.getBytes();
MessageDigest mdtemp = MessageDigest.getInstance("MD5");
mdtemp.update(strtemp);
byte[] md = mdtemp.digest();
int length = md.length;
for (int i = 0; i < length; i++) {
//大小写得到的结果要用equalsIngnoreCase比较为true.
// char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
// '9', 'a', 'b', 'c', 'd', 'e', 'f' };
char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] ob = new char[2];
ob[0] = digit[(md[i] >>> 4) & 0X0F];
ob[1] = digit[md[i] & 0X0F];
strOutput += new String(ob);
}
return strOutput;
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
System.out.print(MD5Test.md5("a"));
}
}
/*
* 检验你的实现是否正确:
* MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
* MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
* MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
* MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
* MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
*/
用户登陆时,先在服务器端产生一段随机字母或数字,发送到客户端,与密码拼接在一起后使用js的MD5加密,将得到的摘要发送到服务器,服务器从数据库中取得该用户对应的密码,并将刚才发送的随机字母和数字与密码拼接,之后使用java的MD5加密,将得到的摘要和请求中的密码摘要比较是否相同.
随机数字或字母的作用,确保每次生成的摘要都不相同,蓄意破坏者无法使用截取的摘要进行登陆.摘要+sessionId
MD5加密生成摘要,不可逆,同一段代码使用MD5加密得到摘要相同.
项目中遇到了要求加密,从网上找了些文章,整理了一下,备用。
js加密(转)
http://download1.csdn.net/down3/20070604/04115829609.rar
java:
import java.security.MessageDigest;
public class MD5Test {
public final static String md5(String s) {
String strOutput = new String("");
try {
byte[] strtemp = s.getBytes();
MessageDigest mdtemp = MessageDigest.getInstance("MD5");
mdtemp.update(strtemp);
byte[] md = mdtemp.digest();
int length = md.length;
for (int i = 0; i < length; i++) {
//大小写得到的结果要用equalsIngnoreCase比较为true.
// char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
// '9', 'a', 'b', 'c', 'd', 'e', 'f' };
char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] ob = new char[2];
ob[0] = digit[(md[i] >>> 4) & 0X0F];
ob[1] = digit[md[i] & 0X0F];
strOutput += new String(ob);
}
return strOutput;
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
System.out.print(MD5Test.md5("a"));
}
}
/*
* 检验你的实现是否正确:
* MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
* MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
* MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
* MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
* MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
*/
用户登陆时,先在服务器端产生一段随机字母或数字,发送到客户端,与密码拼接在一起后使用js的MD5加密,将得到的摘要发送到服务器,服务器从数据库中取得该用户对应的密码,并将刚才发送的随机字母和数字与密码拼接,之后使用java的MD5加密,将得到的摘要和请求中的密码摘要比较是否相同.
随机数字或字母的作用,确保每次生成的摘要都不相同,蓄意破坏者无法使用截取的摘要进行登陆.摘要+sessionId
MD5加密生成摘要,不可逆,同一段代码使用MD5加密得到摘要相同.