发表于: 2020-07-03 21:49:32

1 1965


今天完成的事情:今天完成任务五的拦截器,DES算法加密。屋头空调坏了,下午修空调的师傅过来修,耽搁了时间,没有结束任务五。
明天计划的事情:明天收尾,深度思考加提交任务5。
遇到的问题:对于加密中有中文字符的要在转换字符的时候指定编码方式。
收获:

Md5不可逆的解密办法

运用碰撞暴力解密的方法强行解密,但是也有解密失败的几率,以及使用彩虹码的方式。

DES加密算法

1.DES是一种对称算法,就是加密解密使用同一个密钥。密钥必须是8个字节,即64bit,密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用.

2.DES算法的入口参数有三个:Key、Data、Mode。其中Key就是密钥为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 

3.Base64是用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

代码实现

public class DESUtil {
   //默认字符集
   private static final String CHARSET = "utf-8";
   
   public static byte[] des(int mode,byte[] data,byte[] keyData){
                  byte[] ret = null;
           if(data != null && keyData != null && keyData.length==8){
                           try{
                                           // 获取Cipher对象,设置加密算法
           //使用Cipher进行加密,解密处理,需要创建实例对象并初始化。采用工厂模式创建对象
           Cipher cipher = Cipher.getInstance("DES");
                          //生成key对象
          //DES加密算法使用DESKeySpec类,构造方法参数需要为8个字节的密码,也就是传入的keydata
                          DESKeySpec desKeySpec = new DESKeySpec(keyData);
                           //转换成key对象
          SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
                            SecretKey key = keyFactory.generateSecret(desKeySpec);
               //设置Cipher模式,解密或者加密
               cipher.init(mode,key);
               //返回加密结果,参数为加密内容
               ret = cipher.doFinal(data);
           }catch (NoSuchAlgorithmException e) {
                             e.printStackTrace();
           }catch (NoSuchPaddingException e) {
                             e.printStackTrace();
           }catch (IllegalBlockSizeException e) {
                             e.printStackTrace();
           }catch (BadPaddingException e) {
                              e.printStackTrace();
           }catch (InvalidKeySpecException e) {
                                e.printStackTrace();
           }catch (InvalidKeyException e) {
                             e.printStackTrace();
           }

      }
                                 return ret;
   }
             //DES 加密
  public static String desEncrypt(String data,String keydata){
                           if (keydata == null || keydata.length() < 8) {
                                  throw new RuntimeException("加密失败,key不能小于8");
           }
                            if(data == null){return null;}
                      try {
                                       //将传入的字符串类型加密数据和使用的Key转换为byte数组
           byte[] dataByte = data.getBytes(CHARSET);
                             byte[] keyByte = keydata.getBytes(CHARSET);
                            //返回的结果
           byte[] dataResult = des(Cipher.ENCRYPT_MODE,dataByte,keyByte);
                            //new String返回字符串
           //Base64用于传输8Bit字节码
           return new String(Base64.getMimeEncoder().encode(dataResult));
       } catch (UnsupportedEncodingException e) {
                              e.printStackTrace();
                               return data;
       }

   }
         //DES 解密
  public static String desDecrypt(String data,String keydata){
                   if (keydata == null || keydata.length() < 8) {
                            throw new RuntimeException("解密失败,key不能小于8");
       }
                  if(data == null){return null;};
       try {
                          byte[] dataByte = data.getBytes(CHARSET);
               byte[] keyByte = keydata.getBytes(CHARSET);
               byte[] dataResult = des(Cipher.DECRYPT_MODE,Base64.getMimeDecoder().decode(dataByte),keyByte);
               return new String(dataResult,CHARSET);
       } catch (UnsupportedEncodingException e) {
                   e.printStackTrace();
                   return data;
       }
   }
}

Cookie的生成

Cookie属性,max-age   指定Ccookie的生存周期(以秒为单位),path   指定与Cookie关联在一起的网页路径。

跨域传输详情https://www.jb51.net/article/99638.htm

public class CookieUtil {
   /**
    *
    * @param response 响应返回Cookie
    * @param name   名称
    * @param value  
    * @param maxAge  生存时间
    */
   public static void setCookie(HttpServletResponse response,String name,String value,int maxAge){
       Cookie cookie = new Cookie(name,null);
       cookie.setPath("/");
       cookie.setMaxAge(maxAge);
       try{
           //URLEncoder指定传输中文的编码,防止乱码
           cookie.setValue(URLEncoder.encode(value,"utf-8"));
       }
       catch (UnsupportedEncodingException e){
           e.printStackTrace();
       }
       response.addCookie(cookie);
   }

   /**
    *
    * @param cookies
    * @param name
    * @return
    */
   public static Cookie getCookie(Cookie[] cookies,String name){
       if(cookies == null){
           //客户端没有携带cookie
           return null;
       }else{
           //客户端携带了cookie
           for(Cookie cookie:cookies){
               if(name.equals(cookie.getName())){
                   return cookie;
               }
           }
           return null;
       }
   }
}



返回列表 返回列表
评论

    分享到