1. 程式人生 > >AES 加密 解密(Hex編碼解碼)

AES 加密 解密(Hex編碼解碼)

Aes加密解密方法使用Hex進行了編碼解碼

package com.baidu.wallet.bdwallet.utils;
import java.io.UnsupportedEncodingException;  
import java.security.InvalidKeyException;  
import java.security.NoSuchAlgorithmException;  
import javax.crypto.BadPaddingException;  
import javax.crypto.Cipher;  
import javax.crypto.IllegalBlockSizeException;  
import javax.crypto.NoSuchPaddingException;  
import javax.crypto.spec.SecretKeySpec; 
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
public class Test {
	 private  static final String AES="AES";  
	 private  static final String UTF8="UTF-8";  
	    
	   /**
	    * AES加密
	    * @param content
	    * @param pkey
	    * @return
	    * @throws DecoderException
	    */
	    private static byte[] encrypt(String content, String pkey) throws DecoderException {  
	        try {  
	            String private_key=pkey;
	            byte[] encodeFormat=null;
				try {
					//祕鑰 Hex解碼為什麼祕鑰要進行解碼,因為祕鑰是某個祕鑰明文進行了Hex編碼後的值,所以在使用的時候要進行解碼
					encodeFormat = Hex.decodeHex(private_key.toCharArray());
				} catch (DecoderException e) {
					e.printStackTrace();
				}
	            SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);  
	            // Cipher物件實際完成加密操作  
	            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");    
	            // 加密內容進行編碼  
	            byte[] byteContent = content.getBytes(UTF8);  
	            // 用密匙初始化Cipher物件  
	            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;  
	    }  
	  
	    /**
	     * AES解密
	     * @param contents
	     * @param password
	     * @return
	     * @throws DecoderException
	     */
	    private static byte[] decrypt(String contents, String password) throws DecoderException {  
	        try { 
	        	//密文使用Hex解碼
	        	byte[]content = Hex.decodeHex(contents.toCharArray());  
	        	//祕鑰 Hex解碼為什麼祕鑰要進行解碼,因為祕鑰是某個祕鑰明文進行了Hex編碼後的值,所以在使用的時候要進行解碼
	            byte[] encodeFormat = Hex.decodeHex(password.toCharArray()); 
	            SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);  
	            // Cipher物件實際完成加密操作  
	            Cipher cipher = Cipher.getInstance(AES);  
	            // 用密匙初始化Cipher物件  
	            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;  
	    }  
	  
	    /**
	     * Aes加密
	     * @param context 明文
	     * @param private_key 祕鑰
	     * @return 
	     * @throws DecoderException
	     */
	   public static String  encryption(String context,String private_key) throws DecoderException{
		   //加密後的明文也就變成了密文
		   byte[] encryptResult = encrypt(context, private_key);  
		   //密碼文Hex編碼
	       String encryptResultStr = Hex.encodeHexString(encryptResult);
		   return encryptResultStr;
	   }
	   
	   /**
	    * Aes解密
	    * @param context 密文
	    * @param private_key 祕鑰
	    * @return
	    * @throws DecoderException
	    * @throws UnsupportedEncodingException
	    */
	   public static String decryption(String context,String private_key) throws DecoderException, UnsupportedEncodingException{
		  //這裡的密文解密前先進行了Hex解碼
		   byte[] decryptResult = decrypt(context, private_key); 
		   String result = new String(decryptResult, UTF8); 
		   return result;
	   }
	  
	  
	    public static void main(String[] args) throws UnsupportedEncodingException, DecoderException { 
	    	//加密內容
	        String content = "123456787654321";  
	        //AES加密解密祕鑰
	        String password = "這個值一般都是給定的,雙發都知道";
	        // 加密  
	        System.out.println("加密前:" + content);  
	        // 呼叫加密方法
	        String encryptResultStr = encryption(content, password);  
	        System.out.println("加密後:" + encryptResultStr);  
	        // 呼叫解密方法
	        String result  = decryption(encryptResultStr, password);  
	        // 解密內容進行解碼  
	        System.out.println("解密後:" + result);  
	    }  
}
這個方法在正式的專案中已經在使用木有問題,注意這裡的AES加密解密你要要對哦……
上面使用的就是org.apache.commons.codec.binary.Hex這個類的方法,在maven中配置如下:
<dependency>  
            <groupId>commons-codec</groupId>  
            <artifactId>commons-codec</artifactId>  
            <version>1.4</version>  
        </dependency>  
注意:這裡要使用1.4以及以上版本,應為1.4以下的沒有Hex.encodeHexString(byte[])這個方法!

相關推薦

AES 加密 解密Hex編碼解碼

Aes加密解密方法使用Hex進行了編碼解碼 package com.baidu.wallet.bdwallet.utils; import java.io.UnsupportedEncodingException; import java.security.Inval

AES加密解密工具類+例項

工具類:  package com.valueaddedservices.web.utils; import java.util.Date; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;

CTR分組模式實現AES加密解密go語言

版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 AES演算法簡介 AES演算法是為了取代DES演算法而生,雖然3DES演算法仍然可以使用,但是效率比較低下,AES演算法是在眾多演算法中選拔

android AES加密解密最新版

專案中要用到AES加密,百度上的AES壓根不能用,也不知道是那年的東西了,和後臺不相容,後來,後臺把他的AES程式碼拷給我  通過PHP程式碼找到了對應的Android程式碼 原文地址:http://www.funboxpower.com/php_android_ios_a

32位AES加密解密AES/ECB/PKCS7Padding

兩個問題:1. 金鑰超出了JDK預設的長度128時會報錯:java.security.InvalidKeyException: Illegal key size or default parameters(參考別人的)因為美國的出口限制,Sun通過許可權檔案(local_po

java 按位元組讀寫二進位制檔案Base64編碼解碼

最近在做專案時遇到這樣一個需求:依次讀取本地資料夾裡所有檔案的內容,轉為JSON,傳送到ActiveMQ的訊息佇列, 然後從MQ的訊息佇列上獲取檔案的資訊,依次寫到本地。常見的檔案型別,比如.txt 和.png等檔案的讀寫並不難。但是,我剛才所提到的需求,如果用常規的方法去讀寫,比如按位元組讀取檔案內容

java 按字節讀寫二進制文件Base64編碼解碼

h+ lee bean 字節數組 inpu 讀取 write bytearray 轉換工具類 最近在做項目時遇到這樣一個需求:依次讀取本地文件夾裏所有文件的內容,轉為JSON,發送到ActiveMQ的消息隊列, 然後從MQ的消息隊列上獲取文件的信息,依次寫到本地。常見的文

線上BASE64加密解密、UrlEncode編碼/解碼、native/ascii線上轉換工具 -toolfk程式設計師工具網

程式碼教學 本工具[線上BASE64加密解密、UrlEncode編碼/解碼、native/ascii線上轉換工具]依賴的程式碼庫為 STEP 1 STEP 2 核心程式碼如下 function base64_encode(message)

Java 3DES加密解密Commons.Codec Base64

依賴包import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.binary.Base64;演算法程式碼 /** * 轉換成十六進位制字串 * @

javaweb網頁上傳圖片並顯示在頁面上,並在服務端存到磁碟base64編碼解碼

最後 服務端接收到頁面傳過來的全部的BASE64編碼後 public String uploadimgsave(String imagepath){   String url = "";   OutputStream os=null;   String ImgPath="D:/img";   //檔案存放目

AES 加密 解密 Hex編碼解碼

  最近做小程式使用者ID驗證的問題,文明傳遞有風險,所以想加密再傳送使用者ID,找了些加密的方法, 最開始想用MD5加密,以前有過這樣的加密方式,現在換一種RES方式   對應的一組公鑰和私鑰加密方式, /** * @author lmc * @version d

php aes加密解密兼容php5、php7

bytes pri rip dom ase lee vat idea cipher <?php /** * @desc:php aes加密解密類 * @author [Lee] <[<[email protected]>]> */ class

java AES 加密解密工具Advanced Encryption Standard

@param key block 生成 utf i++ spec res null 1、通用方法 package com.qlkj.hzd.commom.utils; import javax.crypto.*; import java.io.Unsupported

工具篇——AESCBCUtil用於AES加密解密

寫程式碼的四點:      1.明確需求。要做什麼?      2.分析思路。要怎麼做?(1,2,3……)      3.確定步驟。每一個思路要用到哪些語句、方法和物件。      4.程式碼實現。用具體的語言程式碼將思路實現出來。 學習新技術的四點:      

使用AES演算法對檔案進行加密解密JAVA+Eclipse

一、專案中引用第三方類庫的方法    Bouncy Castle類庫的用法(如何在自己的專案中使用第三方類庫)    1)手動配置    將.jar,src,javadoc拷到專案目錄下   專案名,右鍵選build path-configure build path   

Openssl及加密解密openssl

opensslopenssl是一個條件實現了上百種算法、實現了單向加密工具等一組套件,代碼量很小但是功能強大。它有三部分組成:libcrypto:通用功能的加密庫,軟件開發時可以直接調用libssl:實現TLS/SSL的功能openssl:多功能命令行工具,加密、解密、創建CA、證書、一對秘鑰等openssl

C/C++使用openssl進行摘要和加密解密md5, sha256, des, rsa

fin hex pau 字節 system org key rate 釋放 openssl裏面有很多用於摘要哈希、加密解密的算法,方便集成於工程項目,被廣泛應用於網絡報文中的安全傳輸和認證。下面以md5,sha256,des,rsa幾個典型的api簡單使用作為例子。

Maven項目的RSA加密解密用戶數據的配置流程:

nts iic params replace irf contains czc mapping cte   做過三年多的程序員了,之前同事們都喜歡發表博客文章 而鄙人特例。 一般都是看文章,畢竟有現成的糧食,幹嘛還多此一舉額,呵呵。   也就沒想著註冊一下賬號 就在前不

字符串加密解密Base64

bcd base64 else if 字符 utf-8 base Coding ase NPU var Base64 = { // private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl

ASC加密解密筆記

涉及變數:   // 加密密碼:key==>springblade                       //content==>需要加密的內容 &nb