DES信息加密解密

来源:互联网 发布:win7允许程序访问网络 编辑:程序博客网 时间:2024/06/02 21:30

import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
* DES数据加密
*/
class DESUtil {

   //指定DES加密解密的密钥
   private static Key key;
   private static String KEY_STR = "myKey";
  
   static {
       try{
           KeyGenerator generator = KeyGenerator.getInstance("DES");
           generator.init(new SecureRandom(KEY_STR.getBytes()));
           key = generator.generateKey();
           generator = null; 
       } catch (Exception e) {
           throw new RuntimeException(e); 
       } 
   }
  
   //加密方法
   public static String getEncryptString(String str) {
       BASE64Encoder base64en = new BASE64Encoder();
       try{
          byte[] strBytes = str.getBytes("UTF8");
          Cipher cipher = Cipher.getInstance("DES");
          cipher.init(Cipher.ENCRYPT_MODE, key);
          byte[] enctyptStrBytes = cipher.doFinal(strBytes);
          return base64en.encode(enctyptStrBytes);
       } catch (Exception e){
          throw new RuntimeException(e); 
       } 
   }
  
   //解密方法
   public static String getDecryptString(String str) {
       BASE64Decoder base64De = new BASE64Decoder();
       try {
           byte[] strBytes = base64De.decodeBuffer(str);
           Cipher cipher = Cipher.getInstance("DES");
           cipher.init(Cipher.DECRYPT_MODE, key);
           byte[] decryptStrBytes = cipher.doFinal(strBytes);
           return new String(decryptStrBytes, "UTF8");
       } catch(Exception e) {
           throw new RuntimeException(e);
       } 
   }
  public static void main(String[] args) {
      if (args==null || args.length<1) 
         System.out.println("请输入要加密的字符,用空格分隔");
     else {
         for (String arg : args) {
             System.out.println("原文:" + arg);
             System.out.println("加密:" + getEncryptString(arg)); 
             System.out.println("解密:" + getDecryptString( getEncryptString(arg) ));   
         } 
     }   
  }
}