国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java使用Hex編碼解碼實現(xiàn)Aes加密解密功能示例

2019-11-26 13:18:58
字體:
供稿:網(wǎng)友

本文實例講述了java使用Hex編碼解碼實現(xiàn)Aes加密解密功能。分享給大家供大家參考,具體如下:

這里的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");        // 加密內(nèi)容進行編碼        byte[] byteContent = content.getBytes(UTF8);        // 用密匙初始化Cipher對象        cipher.init(Cipher.ENCRYPT_MODE, key);        // 正式執(zhí)行加密操作        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);        // 正式執(zhí)行解密操作        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 {      //加密內(nèi)容      String content = "123456787654321";      //AES加密解密秘鑰      String password = "這個值一般都是給定的,雙發(fā)都知道";      // 加密      System.out.println("加密前:" + content);      // 調(diào)用加密方法      String encryptResultStr = encryption(content, password);      System.out.println("加密后:" + encryptResultStr);      // 調(diào)用解密方法      String result = decryption(encryptResultStr, password);      // 解密內(nèi)容進行解碼      System.out.println("解密后:" + result);    }}

這個方法在正式的項目中已經(jīng)在使用木有問題,注意這里的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[])這個方法!

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:

密碼安全性在線檢測:
http://tools.VeVB.COm/password/my_password_safe

高強度密碼生成器:
http://tools.VeVB.COm/password/CreateStrongPassword

迅雷、快車、旋風URL加密/解密工具:
http://tools.VeVB.COm/password/urlrethunder

在線散列/哈希算法加密工具:
http://tools.VeVB.COm/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.VeVB.COm/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.VeVB.COm/password/sha_encode

希望本文所述對大家java程序設計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 年辖:市辖区| 辽阳县| 铜梁县| 稻城县| 寿阳县| 黄梅县| 郓城县| 武安市| 南召县| 黄冈市| 广元市| 郸城县| 安塞县| 耒阳市| 利辛县| 陵水| 祥云县| 济阳县| 承德县| 尼木县| 满洲里市| 杭锦后旗| 晴隆县| 马公市| 锡林浩特市| 温泉县| 巨鹿县| 长子县| 温州市| 呼伦贝尔市| 当雄县| 新竹县| 孟村| 漳平市| 卢氏县| 大名县| 天祝| 灵川县| 平昌县| 宝鸡市| 恩施市|