Home  >  Article  >  Java  >  How to implement AES encryption?

How to implement AES encryption?

PHP中文网
PHP中文网Original
2017-06-20 14:48:081492browse

package util;

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 org.apache.tomcat.util.codec.binary.Base64;

/**
*
* @author Administrator
*
*/
public class AES {

// 加密
   public static String Encrypt(String sSrc, String sKey) throws Exception {
       if (sKey == null) {
           System.out.print("Key为空null");
           return null;
       }
       // 判断Key是否为16位
       if (sKey.length() != 16) {
           System.out.print("Key长度不是16位");
           return null;
       }
       byte[] raw = sKey.getBytes("utf-8");
       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
       byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
   }

// Decryption
public static String Decrypt(String sSrc, String sKey) throws Exception {
                                                                                                                                                                                                                                                 
# System.out.print("Key is null");
16) {
            System.out.print("Key length is not 16 bits");
                                              return null; #Secretkeyspec Skeyspec = New Secretkeyspec (raw, "aes");
cipher cipher = cipher.getInstance ("AES/ECB/PKCS5Padding"); Her.DeCrypt_mode, Skeyspec);
byte[] encrypted1 = new Base64().decode(sSrc);//Use base64 to decrypt first
            try {
            byte[] original = cipher.doFinal(encrypted1); original,"utf-8");
                                                                                  return originalString; }
} Catch (Exception EX) {
System.out.println (ex.tostring ());
Return null;
}
}
/**
* Encryption
*
* @param content Content that needs to be encrypted
* @param password Encryption password
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom (password.getBytes()); retKeySpec key = new SecretKeySpec(enCodeFormat, "AES") ;
                                                                                                                                                                                                                                            to be cipher.init(Cipher.ENCRYPT_MODE , key);// Initialization
              byte[] result = cipher.doFinal(byteContent);                   e.printStackTrace();
        } catch (NoSuchPaddingException e) {                         e.printStackTrace();
            } catch (InvalidKeyException e) {      );
      } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();    
          } catch (IllegalBlockSizeException e) {  
                   e.printStackTrace();  
           } catch (BadPaddingException e) {  
                   e.printStackTrace();  
           }  
           return null;  
   }  
   /**Decryption
* @param content Content to be decrypted
* @param password Decryption key
* @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;  
   }  
   /**Convert binary to hexadecimal
* @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();  
   }  
   /**Convert hexadecimal to binary
* @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); ), 16);
                    result[i] = (byte) (high * 16 + low); [] args) throws Exception {
/*
* AES-128-ECB encryption mode is used here, and the key needs to be 16 bits.
*/
String cKey = "1234567890123456";
// String that needs to be encrypted
String cSrc = "www.gowhere.so";
System.out.println(cSrc) ;
// Encryption
String enString = AES.Encrypt(cSrc, cKey);
System.out.println("The encrypted string is: " + enString);

// Decrypt
String DeString = AES.Decrypt(enString, cKey);
System.out.println("The decrypted string is: " + DeString);
String content = "test";
String password = "12345678";

//Encryption

System.out.println("Before encryption: " + content);
byte[] encryptResult = encrypt(content, password);
String encryptResultStr = parseByte2HexStr(encryptResult);
System.out.println("After encryption: " + encryptResultStr);
//Decryption
byte[] decryptFrom = parseHexStr2Byte(encryptResul tStr);
byte[] decryptResult = decrypt(decryptFrom,password);
System.out.println("After decryption: " + new String(decryptResult));
}
}

The above is the detailed content of How to implement AES encryption?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn