java实现的AES秘钥生成算法示例

 更新时间:2017年01月05日 11:58:06   作者:QH_JAVA  
这篇文章主要介绍了java实现的AES秘钥生成算法,结合实例形式分析了AES秘钥生成算法原理与实现技巧,需要的朋友可以参考下

本文实例讲述了java实现的AES秘钥生成算法。分享给大家供大家参考,具体如下:

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class Test {
  public static void main(String[] args) {
    getKey();
    getKeyByPass();
  }
  /**
  * 随机生成秘钥
  */
  public static void getKey() {
    try {
      KeyGenerator kg = KeyGenerator.getInstance("AES");
      kg.init(128);
      //要生成多少位,只需要修改这里即可128, 192或256
      SecretKey sk = kg.generateKey();
      byte[] b = sk.getEncoded();
      String s = byteToHexString(b);
      System.out.println(s);
      System.out.println("十六进制密钥长度为"+s.length());
      System.out.println("二进制密钥的长度为"+s.length()*4);
    }
    catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
      System.out.println("没有此算法。");
    }
  }
  /**
  * 使用指定的字符串生成秘钥
  */
  public static void getKeyByPass() {
    //生成秘钥
    String password="testkey";
    try {
      KeyGenerator kg = KeyGenerator.getInstance("AES");
      // kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256
      //SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以生成的秘钥就一样。
      kg.init(128, new SecureRandom(password.getBytes()));
      SecretKey sk = kg.generateKey();
      byte[] b = sk.getEncoded();
      String s = byteToHexString(b);
      System.out.println(s);
      System.out.println("十六进制密钥长度为"+s.length());
      System.out.println("二进制密钥的长度为"+s.length()*4);
    }
    catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
      System.out.println("没有此算法。");
    }
  }
  /**
  * byte数组转化为16进制字符串
  * @param bytes
  * @return
  */
  public static String byteToHexString(byte[] bytes) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < bytes.length; i++) {
      String strHex=Integer.toHexString(bytes[i]);
      if(strHex.length() > 3) {
        sb.append(strHex.substring(6));
      } else {
        if(strHex.length() < 2) {
          sb.append("0" + strHex);
        } else {
          sb.append(strHex);
        }
      }
    }
    return sb.toString();
  }
}

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实现的剪刀石头布游戏示例

    Java实现的剪刀石头布游戏示例

    这篇文章主要介绍了Java实现的剪刀石头布游戏,涉及java随机数生成及逻辑判定等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • 详解Lombok快速上手(安装、使用与注解参数)

    详解Lombok快速上手(安装、使用与注解参数)

    这篇文章主要介绍了详解Lombok快速上手(安装、使用与注解参数) ,这里整理了一些日常编码中能遇到的所有关于它的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Java中的对象和对象引用实例浅析

    Java中的对象和对象引用实例浅析

    这篇文章主要介绍了Java中的对象和对象引用,实例分析了对象与对象引用的概念与相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • Java中实现接口限流的方案详解

    Java中实现接口限流的方案详解

    常用的接口限流方案就是计数器限流方案、时间窗口限流方案和令牌桶限流方案等,这些方案的概念大致也知道,但是实际上也没有实现过,所以本文就来自动动手实践一下吧
    2023-05-05
  • 详解springboot如何更新json串里面的内容

    详解springboot如何更新json串里面的内容

    这篇文章主要为大家介绍了springboot 如何更新json串里面的内容,文中有详细的解决方案供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-10-10
  • Java异常 Exception类及其子类(实例讲解)

    Java异常 Exception类及其子类(实例讲解)

    下面小编就为大家带来一篇Java异常 Exception类及其子类(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 详解Java编程中static关键字和final关键字的使用

    详解Java编程中static关键字和final关键字的使用

    这篇文章主要介绍了详解Java编程中static关键字和final关键字的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程

    IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程

    这篇文章主要介绍了IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java中JavaBean对象和Map的互相转换方法实例

    Java中JavaBean对象和Map的互相转换方法实例

    为什么需要将javaBean和map进行转换,在很多应用场景中,需要将key=value形式的数据与javaBean对象相互转换,下面这篇文章主要给大家介绍了关于Java中JavaBean对象和Map的互相转换的相关资料,需要的朋友可以参考下
    2022-11-11
  • 关于ResponseEntity类和HttpEntity及跨平台路径问题

    关于ResponseEntity类和HttpEntity及跨平台路径问题

    这篇文章主要介绍了关于ResponseEntity类和HttpEntity及跨平台路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论