栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用Hex编码解码实现Aes加密解密功能示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用Hex编码解码实现Aes加密解密功能示例

本文实例讲述了java使用Hex编码解码实现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";
    
    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;
    }
    
    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;
    }
    
    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;
    }
    
    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中配置如下:


  commons-codec
  commons-codec
  1.4


注意:这里要使用1.4以及以上版本,应为1.4以下的没有Hex.encodeHexString(byte[])这个方法!

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe

高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword

迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

希望本文所述对大家java程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号