发表于: 2017-06-30 22:20:17

1 1153


今天完成的事情:学习des加密

      DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 
     DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如 Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致 的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的 Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 

跑了个例子

package com.afreon.util;

import java.io.IOException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DesUtil {

private final static String DES = "DES";

   public static void main(String[] args) throws Exception {
String data = "123 456";
       String key = "wang!@#$%";
       System.err.println(encrypt(data, key));
       System.err.println(decrypt(encrypt(data, key), key));

   }

/**
    * Description 根据键值进行加密
    * @param data
    * @param key  加密键byte数组
    * @return
    * @throws Exception
    */
   public static String encrypt(String data, String key) throws Exception {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
       String strs = new BASE64Encoder().encode(bt);
       return strs;
   }

/**
    * Description 根据键值进行解密
    * @param data
    * @param key  加密键byte数组
    * @return
    * @throws IOException
    * @throws Exception
    */
   public static String decrypt(String data, String key) throws IOException,
           Exception {
if (data == null)
return null;
       BASE64Decoder decoder = new BASE64Decoder();
       byte[] buf = decoder.decodeBuffer(data);
       byte[] bt = decrypt(buf,key.getBytes());
       return new String(bt);
   }

/**
    * Description 根据键值进行加密
    * @param data
    * @param key  加密键byte数组
    * @return
    * @throws Exception
    */
   private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
       SecureRandom sr = new SecureRandom();

       // 从原始密钥数据创建DESKeySpec对象
       DESKeySpec dks = new DESKeySpec(key);

       // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
       SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
       SecretKey securekey = keyFactory.generateSecret(dks);

       // Cipher对象实际完成加密操作
       Cipher cipher = Cipher.getInstance(DES);

       // 用密钥初始化Cipher对象
       cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

       return cipher.doFinal(data);
   }


/**
    * Description 根据键值进行解密
    * @param data
    * @param key  加密键byte数组
    * @return
    * @throws Exception
    */
   private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
       SecureRandom sr = new SecureRandom();

       // 从原始密钥数据创建DESKeySpec对象
       DESKeySpec dks = new DESKeySpec(key);

       // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
       SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
       SecretKey securekey = keyFactory.generateSecret(dks);

       // Cipher对象实际完成解密操作
       Cipher cipher = Cipher.getInstance(DES);

       // 用密钥初始化Cipher对象
       cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

       return cipher.doFinal(data);
   }

对武汉分院的宣传视频进行片头制作:

用ae模版,替换素材把分院每个人的照片放上去基本完事。

明天计划的事情:登录页面jsp编写,拦截器学习

遇到的问题:视频制作素材收集速度缓慢,拖累效率

收获:了解DES算法,和初步使用。


返回列表 返回列表
评论

    分享到