您的位置:首页 > 编程语言 > Java开发

一、AES

2015-12-03 16:04 295 查看
import java.io.UnsupportedEncodingException;  

import java.security.InvalidKeyException;  

import java.security.NoSuchAlgorithmException;  

import java.security.SecureRandom;  

import javax.crypto.BadPaddingException;  

import javax.crypto.Cipher;  

import javax.crypto.IllegalBlockSizeException;  

import javax.crypto.KeyGenerator;  

import javax.crypto.NoSuchPaddingException;  

import javax.crypto.SecretKey;  

import javax.crypto.spec.SecretKeySpec;  

import com.sun.org.apache.xml.internal.security.utils.Base64;

/**

 * 对称钥匙加密中一种高级数据加密标准(AES)规范,将逐渐替代DES加密

 * */

public class AES {  
/** 
* 加密 
* @param content 需要加密的内容 
* @param password  加密密码 
* @return 
*/
public static byte[] encrypt(String content, String password) {   
try {              
        KeyGenerator kgen = KeyGenerator.getInstance("AES");   
kgen.init(128, new SecureRandom(password.getBytes()));   
SecretKey secretKey = kgen.generateKey();   
byte[] enCodeFormat = secretKey.getEncoded();   
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");   
Cipher cipher = Cipher.getInstance("AES");// 创建密码器   
byte[] byteContent = content.getBytes("utf-8");   
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化   
byte[] result = cipher.doFinal(byteContent);   
return result; // 加密   
} catch (NoSuchAlgorithmException e) {   
        e.printStackTrace();   
} catch (NoSuchPaddingException e) {   
        e.printStackTrace();   
} catch (InvalidKeyException e) {   
        e.printStackTrace();   
} catch (UnsupportedEncodingException e) {   
        e.printStackTrace();   
} catch (IllegalBlockSizeException e) {   
        e.printStackTrace();   
} catch (BadPaddingException e) {   
        e.printStackTrace();   
}   
return null;   
}   

       

   /**解密 

    * @param content  待解密内容 

    * @param password 解密密钥 

    * @return 

    */   

    public static byte[] decrypt(byte[] content, String password) {   
try { 
KeyGenerator kgen = KeyGenerator.getInstance("AES");   
kgen.init(128, new SecureRandom(password.getBytes()));   
SecretKey secretKey = kgen.generateKey();   
byte[] enCodeFormat = secretKey.getEncoded();   
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");               
Cipher cipher = Cipher.getInstance("AES");// 创建密码器   
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化   
byte[] result = cipher.doFinal(content);   
return result; // 加密   
} catch (NoSuchAlgorithmException e) {   
   e.printStackTrace();   
} catch (NoSuchPaddingException e) {   
   e.printStackTrace();   
} catch (InvalidKeyException e) {   
   e.printStackTrace();   
} catch (IllegalBlockSizeException e) {   
e.printStackTrace();   
} catch (BadPaddingException e) {   
   e.printStackTrace();   
}   
return null;   
}  

        

        

      /**将二进制转换成16进制 

       * @param buf 
* @return 
*/   

    public static String parseByte2HexStr(byte buf[]) {   

       StringBuffer sb = new StringBuffer();   

       for (int i = 0; i < buf.length; i++) {   

           String hex = Integer.toHexString(buf[i] & 0xFF);   

           if (hex.length() == 1) {   

                   hex = '0' + hex;   

           }   

           sb.append(hex.toUpperCase());   

       }   

       return sb.toString();   

    }   
    
  /**将16进制转换为二进制 
* @param hexStr 
* @return 
*/   
public static byte[] parseHexStr2Byte(String hexStr) {   
   if (hexStr.length() < 1)   
           return null;   
   byte[] result = new byte[hexStr.length()/2];   
   for (int i = 0;i< hexStr.length()/2; i++) {   
           int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);   
           int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);   
           result[i] = (byte) (high * 16 + low);   
   }   
   return result;   
}   

          
public static void main(String[] args) {  
String content = "test";   
String password = "12345678";   
//加密   
System.out.println("加密前:" + content);   
byte[] encryptResult = encrypt(content, password);  
String tt4 = Base64.encode(encryptResult);  
System.out.println(new String(tt4));  
//解密   
byte[] decryptResult = decrypt(encryptResult,password);   
System.out.println("解密后:" + new String(decryptResult));   
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息