当前位置: 首页 > 编程笔记 >

java基于AES对称加密算法实现的加密与解密功能示例

太叔乐家
2023-03-14
本文向大家介绍java基于AES对称加密算法实现的加密与解密功能示例,包括了java基于AES对称加密算法实现的加密与解密功能示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:

package com.soufun.com;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
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;
/**
 * @author WHD
 */
public class AesUtil {
  private static final String AES="AES";
  private static final String UTF8="UTF-8";
  static KeyGenerator kgen =null;
  static{
    try {
      kgen= KeyGenerator.getInstance(AES);
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  /*
   * @param content:
   * @param password:
   */
  private static byte[] encrypt(String content, String password) {
    try {
      // 使用静态代码块来生成KeyGenerator对象
      //KeyGenerator kgen = KeyGenerator.getInstance(AES);
      // 使用128 位
      kgen.init(128, new SecureRandom(password.getBytes()));
      SecretKey secretKey = kgen.generateKey();
      byte[] encodeFormat = secretKey.getEncoded();
      SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
      // Cipher对象实际完成加密操作
      Cipher cipher = Cipher.getInstance(AES);
      // 加密内容进行编码
      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;
  }
  /*
   * @param content:
   * @param password:
   */
  private static byte[] decrypt(byte[] content, String password) {
    try {// 使用静态代码块来生成KeyGenerator对象
      //KeyGenerator kgen = KeyGenerator.getInstance(AES);
      // 使用128 位
      kgen.init(128, new SecureRandom(password.getBytes()));
      SecretKey secretKey = kgen.generateKey();
      byte[] encodeFormat = secretKey.getEncoded();
      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;
  }
  /**
   * 二进制--》十六进制转化
   * @param buf
   * @return
   */
  private 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();
  }
  /**
   * 十六进制--》二进制转化
   * @param hexStr
   * @return
   */
  private 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);
      int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
          16);
      result[i] = (byte) (high * 16 + low);
    }
    return result;
  }
  public static void main(String[] args) throws UnsupportedEncodingException {
    long begin=new Date().getTime();
    String content = "aaades加密测试";
    String password = "12345678dd";
    // 加密
    System.out.println("加密前:" + content);
    byte[] encryptResult = encrypt(content, password);
    String encryptResultStr = parseByte2HexStr(encryptResult);
    System.out.println("加密后:" + encryptResultStr);
    // 解密
    byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);
    byte[] decryptResult = decrypt(decryptFrom, password);
    // 解密内容进行解码
    String result = new String(decryptResult, UTF8);
    System.out.println("解密后:" + result);
    long end= new Date().getTime();
    System.out.println(end-begin);
  }
}

注:SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行,可以复原这个序列。

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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍java基于Des对称加密算法实现的加密与解密功能详解,包括了java基于Des对称加密算法实现的加密与解密功能详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java基于Des对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下: Des 加密相关类介绍: SecureRandom  这个类是继承自java.util.Random 这个类 SecureRan

  • 我不是openssl的专家。我把下面的代码放在一起,使用AES-CTR加密和解密消息。输出不是我期望看到的。 我得到的结果是这样的:“简单:、u∩U└■我的 知道是什么导致的吗?我想做的就是使用AES使用CTR来加密和解密消息。我想得到与纯文本相同的加密长度(或1字节)。我用DES做过这个,但是DES不安全。然后,我将使用AES-CTR加密和解密我的流量(流)。

  • 问题内容: 我找到了用Java实施AES加密/解密的指南,并试图理解每一行并将其放入自己的解决方案中。但是,我没有完全理解它,因此出现了问题。最终目标是拥有基于密码的加密/解密。我已经阅读了有关此的其他文章/ stackoverflow帖子,但是大多数文章没有提供足够的解释(我对Java加密非常陌生) 我现在的主要问题是,即使设置了 I,最后还是会得到不同的Base64结果(每次都是随机的,但是我

  • 本文向大家介绍Java实现的对称加密算法AES定义与用法详解,包括了Java实现的对称加密算法AES定义与用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的对称加密算法AES定义与用法。分享给大家供大家参考,具体如下: 一 简介 1、AES是目前使用最多的对称加密算法。 2、AES的优势之一是至今尚未被破解。 3、AES通常用于移动通信系统加密以及基于SSH协议(SSH

  • 本文向大家介绍java 对称加密算法实现详解,包括了java 对称加密算法实现详解的使用技巧和注意事项,需要的朋友参考一下 前言 对于信息的加密方式多种多样,之前为大家介绍了一种自己设计的加密方式,有兴趣的朋友可以欣赏一下,欢迎给予指点。今天为大家介绍一下对称加密方式,所谓对称加密指的是加密和解密方式呈对称格式,即解密是加密的逆过程,下面我们就看一下:DES、3DES、AES、PBE这四种方式,他

  • 本文向大家介绍Java实现文件的加密解密功能示例,包括了Java实现文件的加密解密功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下: PS:关于加密解密感兴趣的朋友还可以参考本站在线工具: 文字在线加密解密工具(包含AES、DES、RC4等): http://tools.jb51.net/password/txt_enco