Java加密算法(DES,MD5)

import  java.security.Security;

import  javax.crypto.Cipher;
import  javax.crypto.KeyGenerator;
import  javax.crypto.SecretKey;
public   class  DesEncode {

  
private   static  String Algorithm = " DES " // 定义 加密算法,可用 DES,DESede,Blowfish

  
private   static   boolean  debug  =   false ;

  
static {
    Security.addProvider(
new  com.sun.crypto.provider.SunJCE());
  }

  
// 生成密钥
   public   static   byte [] getKey()  throws  Exception{
    
byte [] key  =  { - 50 - 46 - 78 - 69 - 42 - 86 - 75 - 64 };
    
if  (debug) {
        System.out.println(
" 生成密钥: " + byte2hex(key));
    }
    
return  key;
  }

  
// 加密
   public   static  String encode(String input)  throws  Exception{
    SecretKey deskey 
=   new  javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
    
if  (debug){
        System.out.println(
" 加密前的字符串: " + input);
        System.out.println(
" 加密前的二进串: " + byte2hex(input.getBytes()));
    }
    Cipher c1 
=  Cipher.getInstance(Algorithm);
    c1.init(Cipher.ENCRYPT_MODE,deskey);
    
byte [] cipherByte = c1.doFinal(input.getBytes());
   
    
if  (debug)
      System.out.println(
" 加密后的二进串: " + byte2hex(cipherByte));
    
return  byte2hex(cipherByte);
  }

  
// 解密
   public   static  String decode(String input)  throws  Exception{
    SecretKey deskey 
=   new  javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
    
if  (debug) {
        System.out.println(
" 解密前的信息: " + input);
    }
    
    Cipher c1 
=  Cipher.getInstance(Algorithm);
    c1.init(Cipher.DECRYPT_MODE,deskey);
    
byte [] clearByte = c1.doFinal(hex2byte(input));
    
if  (debug){
      System.out.println(
" 解密后的二进串: " + byte2hex(clearByte));
      System.out.println(
" 解密后的字符串: " + ( new  String(clearByte)));
    }
    
return   new  String(clearByte);
  }

  
// md5()信息摘要, 不可逆
   public   static  String md5(String input)  throws  Exception{
    java.security.MessageDigest alg
= java.security.MessageDigest.getInstance( " MD5 " );  // or "SHA-1"
     if  (debug){
      System.out.println(
" 摘要前的二进串: " + byte2hex(input.getBytes()));
      System.out.println(
" 摘要前的字符串: " + input);
    }
    alg.update(input.getBytes());
    
byte [] digest  =  alg.digest();
    
if  (debug)
      System.out.println(
" 摘要后的二进串: " + byte2hex(digest));
    
return  byte2hex(digest);
  }

  
// 字节码转换成16进制字符串
   public   static  String byte2hex( byte [] b) {
    String hs
= "" ;
    String stmp
= "" ;
    
for  ( int  n = 0 ;n < b.length;n ++ ){
      stmp
= (java.lang.Integer.toHexString(b[n]  &   0XFF ));
      
if  (stmp.length() == 1 )
        hs
= hs + " 0 " + stmp;
      
else  hs = hs + stmp;
        
// if (n<b.length-1)  hs=hs+":";
      }
    
return  hs.toUpperCase();
  }
  
  
// 16进制字符串转换成字节码
   public   static   byte [] hex2byte(String h) {
    
byte [] ret  =   new   byte [h.length() / 2 ];
    
for ( int  i = 0 ; i < ret.length; i ++ ){
        ret[i] 
=  Integer.decode( " # " + h.substring( 2 * i,  2 * i + 2 )).byteValue();
    }
    
return  ret;
  }

  
public   static   void  main(String[] args)  throws  Exception{
    debug 
=   true ;
    decode(encode(
" 测试加密 " ));
    md5(
" haohao学习啊 " );
  }
}
 

你可能感兴趣的:(Java加密算法(DES,MD5))