发表于: 2017-10-01 23:10:31

1 733



今天完成的事情:

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:我回来了!!!


内容...


返回列表 返回列表
评论

    分享到