JAVA AES 加密 親測可用

DreamWeaver_Zhou發表於2018-01-25

廢話不多說直接上程式碼!! 這個看不懂的就不用學java 了!

package com.pinnacle;

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.commons.codec.binary.Base64;

public class AesTest {

    /**
     * 將byte陣列轉化成為16進位制輸出
     * @param bytes
     * @return
     */
    public static String converByteToHexString(byte[] bytes) {
        String result="";
        for(int i=0;i<bytes.length;i++) {
            int temp=bytes[i] &0xff;
            String tempHex =Integer.toHexString(temp);
            if(tempHex.length()<2) {
                result+="0"+tempHex;
            }else {
                result+=tempHex;
            }
        }
        return result;
    }
    
    /**
     * AES加密演算法
     * @param message
     * @param password
     * @return
     * @throws Exception
     */
    public static byte[] AESJDKEncode(String message,String password)  {
        try {
            KeyGenerator kgen=KeyGenerator.getInstance("AES");//例項化一個用AES加密演算法的金鑰生成器               
            kgen.init(128,new SecureRandom(password.getBytes()));//使用使用者提供的password初始化此金鑰生成器,使其具有確定的金鑰大小128位元組長。
            SecretKey secreKey=kgen.generateKey();//生成一個金鑰。    
            byte[] enCodeFormat=secreKey.getEncoded();//返回基本編碼格式的金鑰,如果此金鑰不支援編碼,則返回 null。
            SecretKeySpec key=new SecretKeySpec(enCodeFormat, "AES");//根據給定的enCodeFormat位元組陣列構造一個用AES演算法加密的金鑰。
            Cipher cipher =Cipher.getInstance("AES");//建立密碼器
            cipher.init(Cipher.ENCRYPT_MODE, key);//初始化  // 以加密的方式用金鑰初始化此 Cipher。
            byte[] result=cipher.doFinal(message.getBytes());//按byteContent單部分操作加密指定的
            return result;//加密  返回加密過後的byteContent
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * AES解密演算法
     * @param message
     * @param password
     * @return
     */
    public static byte[] AESJDKDecode(byte[]message,String password) {
        try {
            KeyGenerator kgen=KeyGenerator.getInstance("AES");
            kgen.init(128,new SecureRandom(password.getBytes()));
            SecretKey secreKey=kgen.generateKey();
            byte[] enCodeFormat=secreKey.getEncoded();
            SecretKeySpec key=new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher =Cipher.getInstance("AES");//建立密碼器
            cipher.init(Cipher.DECRYPT_MODE, key);//初始化
            byte[] result=cipher.doFinal(message);
            return result;//解密
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    
  
    public static void main(String[] args) {
        String content="123123123131";
        String password ="key";
        System.out.println("加密前的字串為:"+content);
        byte[] encodeMessage=AESJDKEncode(content,password);//AES加密
        System.out.println("AES 加密後為 :"+converByteToHexString(encodeMessage));
        byte[] decodeMessage=AESJDKDecode(encodeMessage,password);
        System.out.println("AES 最終解密後為:"+new String(decodeMessage));*/
    }
    
}


相關文章