发表于: 2017-10-01 23:10:31
1 730
今天完成的事情:
1. 了解拦截器
2. 完成MD5
3. 和DES的算法加密
明天计划的事情:
1.在登陆时用MD5对密码加密和验证
2.用DES来生成token并存入cookies,尝试完成免登录
遇到的问题:
1. 在在对于MD5和DES的TEST的测试里不能用
@Resource
private DesUtils desUtils;
错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'utils.DesUtilsTest': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'task.jnshu.utils.DesUtils' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
不知到为什么,并不是spring.xml的错误,对于sevrice的类似代码没有问题的,同样都没有在spring。xml里面注册bean,但是标签可以省去写bean。
收获:
1. 完成MD5
public static String getMD5(String message){
String md5str = "";
try{
//创建一个提供信息的摘要算法,初始化为md5对象
MessageDigest md = MessageDigest.getInstance("MD5");
//将消息变为byte数组
byte[] input = message.getBytes();
//计算后获得字节数组,这就是那128位了
byte[] buff = md.digest(input);
//把数组每一字节(一个字节占八位)换成16进制连成md5字符串
md5str = bytesToHrx(buff);
}catch (Exception e){
e.printStackTrace();
loggerMD5.error("e.getMessage(): " + e.getMessage());
}
return md5str;
}
//二进制转换为16进制
public static String bytesToHrx(byte[] bytes){
StringBuffer md5str = new StringBuffer();
// 把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++){
digital = bytes[i];
if(digital < 0){
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
2. 和DES的算法加密
//加密
public byte[] desCrypto(byte[] datasource,String password){
try{
//生成一个强随机的数
SecureRandom random = new SecureRandom(password.getBytes());
DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8"));
//创建一个密匙工厂,然后用它把DESKeySpec转换成
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
//现在,获取数据并加密
//正式执行加密操作
return cipher.doFinal(datasource);
}catch(Throwable e){
e.printStackTrace();
loggerDES.error("e.getMessage(): " + e.getMessage());
}
return null;
}
//解密
public byte[] decrypt(byte[] src, String password) throws Exception{
//DES算法要有一个可信任的随机数源
SecureRandom random = new SecureRandom();
//创建一个DESKeySpec对象
DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8"));
//创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
//将DESKeySpec对象转换成SecretKey对象
SecretKey securekey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,securekey, random);
//真正开始解密
return cipher.doFinal(src);
}
乱码预计是因为无法用UTF-8来表示,但是信息并没有失真,如果有需要,可以用16进制进行编码。
进度:
任务开始时间:8.14
预计完成时间:10.6
是否有延期风险:有,严重低估了任务5的知识量
禅道:http://task.ptteng.com/zentao/project-task-264.html
PS:我回来了!!!
内容...
评论