package com.cstor.network.tools;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;
public class MD5Util {
private static final String HEX_NUMS_STR="0123456789ABCDEF";
private static final Integer SALT_LENGTH = 12;
/**
* 将16进制字符串转换成字节数组
* @param hex
* @return
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] hexChars = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4
| HEX_NUMS_STR.indexOf(hexChars[pos + 1]));
}
return result;
}
/**
* 将指定byte数组转换成16进制字符串
* @param b
* @return
*/
public static String byteToHexString(byte[] b) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
hexString.append(hex.toUpperCase());
}
return hexString.toString();
}
/**
* 验证口令是否合法
* @param password
* @param passwordInDb
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static boolean validPassword(String password, String passwordInDb)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
//将16进制字符串格式口令转换成字节数组
byte[] pwdInDb = hexStringToByte(passwordInDb);
//声明盐变量
byte[] salt = new byte[SALT_LENGTH];
//将盐从数据库中保存的口令字节数组中提取出来
System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);
//创建消息摘要对象
MessageDigest md = MessageDigest.getInstance("MD5");
//将盐数据传入消息摘要对象
md.update(salt);
//将口令的数据传给消息摘要对象
md.update(password.getBytes("UTF-8"));
//生成输入口令的消息摘要
byte[] digest = md.digest();
//声明一个保存数据库中口令消息摘要的变量
byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];
//取得数据库中口令的消息摘要
System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);
//比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同
if (Arrays.equals(digest, digestInDb)) {
//口令正确返回口令匹配消息
return true;
} else {
//口令不正确返回口令不匹配消息
return false;
}
}
/**
* 获得加密后的16进制形式口令
* @param password
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static String getEncryptedPwd(String password)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
//声明加密后的口令数组变量
byte[] pwd = null;
//随机数生成器
SecureRandom random = new SecureRandom();
//声明盐数组变量
byte[] salt = new byte[SALT_LENGTH];
//将随机数放入盐变量中
random.nextBytes(salt);
//声明消息摘要对象
MessageDigest md = null;
//创建消息摘要
md = MessageDigest.getInstance("MD5");
//将盐数据传入消息摘要对象
md.update(salt);
//将口令的数据传给消息摘要对象
md.update(password.getBytes("UTF-8"));
//获得消息摘要的字节数组
byte[] digest = md.digest();
//因为要在口令的字节数组中存放盐,所以加上盐的字节长度
pwd = new byte[digest.length + SALT_LENGTH];
//将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐
System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);
//将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节
System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);
//将字节数组格式加密后的口令转化为16进制字符串格式的口令
return byteToHexString(pwd);
}
public static void main(String []args) throws NoSuchAlgorithmException, UnsupportedEncodingException{
String s = "admin";
String ds = getEncryptedPwd(s);
System.out.println("ds: " + ds);
System.out.println(validPassword("admin",ds));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
cstormonitor.zip (88个子文件)
cstormonitor
.project 1KB
resource
dbscript.sql 884B
struts.xml 597B
applicationContext.xml 4KB
log4j.properties 2KB
database.properties 316B
.mymetadata 309B
src
com
cstor
network
service
UserService.java 175B
serviceImpl
UserServiceImpl.java 546B
action
UserAction.java 1KB
aop
PrintLogger.java 4KB
dao
UserDao.java 164B
UserDao.xml 686B
tools
MD5Util.java 5KB
test
QuartzTest.java 170B
Test.java 203B
bean
User.java 789B
WebRoot
show.jsp 1KB
WEB-INF
classes
dbscript.sql 884B
struts.xml 597B
applicationContext.xml 4KB
com
cstor
network
service
UserService.class 246B
serviceImpl
UserServiceImpl.class 1KB
action
UserAction.class 3KB
aop
PrintLogger.class 3KB
dao
UserDao.xml 686B
UserDao.class 231B
tools
MD5Util.class 3KB
test
QuartzTest.class 722B
Test.class 746B
bean
User.class 1KB
log4j.properties 2KB
database.properties 316B
lib
org.springframework.oxm-3.1.2.RELEASE.jar 71KB
commons-lang3-3.1.jar 308KB
struts2-spring-plugin-2.3.4.jar 21KB
struts2-core-2.3.4.jar 765KB
aspectjtools.jar 8.57MB
org.springframework.aspects-3.1.2.RELEASE.jar 49KB
log4j-1.2.16.jar 470KB
org.springframework.jdbc-3.1.2.RELEASE.jar 395KB
org.springframework.core-3.1.2.RELEASE.jar 439KB
org.springframework.instrument-3.1.2.RELEASE.jar 7KB
org.springframework.jms-3.1.2.RELEASE.jar 194KB
commons-lang-2.4.jar 256KB
org.springframework.web-3.1.2.RELEASE.jar 536KB
org.springframework.test-3.1.2.RELEASE.jar 224KB
org.springframework.instrument.tomcat-3.1.2.RELEASE.jar 11KB
org.springframework.web.struts-3.1.2.RELEASE.jar 30KB
asm-3.3.1.jar 43KB
slf4j-log4j12-1.6.0.jar 10KB
commons-dbcp-1.4.jar 157KB
org.springframework.web.portlet-3.1.2.RELEASE.jar 186KB
cglib-2.2.2.jar 280KB
org.springframework.expression-3.1.2.RELEASE.jar 172KB
mybatis-generator-core-1.3.2.jar 504KB
mybatis-spring-1.1.1.jar 40KB
org.springframework.context.support-3.1.2.RELEASE.jar 105KB
javassist-3.11.0.GA.jar 600KB
freemarker-2.3.19.jar 909KB
commons-io-2.0.1.jar 156KB
quartz-1.8.6.jar 439KB
org.springframework.aop-3.1.2.RELEASE.jar 325KB
mysql-connector-java-5.0.8-bin.jar 528KB
slf4j-api-1.6.0.jar 25KB
xwork-core-2.3.4.jar 614KB
aspectjweaver.jar 1.67MB
commons-fileupload-1.2.2.jar 58KB
aopalliance-1.0.jar 4KB
org.springframework.transaction-3.1.2.RELEASE.jar 239KB
aspectjrt.jar 112KB
commons-pool-1.6.jar 109KB
ognl-3.0.5.jar 222KB
org.springframework.context-3.1.2.RELEASE.jar 813KB
org.springframework.beans-3.1.2.RELEASE.jar 578KB
commons-collections-3.2.1.jar 562KB
org.springframework.asm-3.1.2.RELEASE.jar 52KB
org.springframework.web.servlet-3.1.2.RELEASE.jar 564KB
mybatis-3.1.1.jar 636KB
org.springframework.orm-3.1.2.RELEASE.jar 371KB
web.xml 2KB
index.jsp 910B
success.jsp 830B
failure.jsp 830B
META-INF
MANIFEST.MF 39B
.myeclipse
.settings
org.eclipse.jdt.core.prefs 330B
org.eclipse.core.resources.prefs 101B
.classpath 5KB
共 88 条
- 1
欧程
- 粉丝: 38
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页