AES(Advanced Encryption Standard)意思是高级加密标准,是一种区块加密标准。这个标准用来替代原先的DES,且已经被广泛使用。

DES使用56位密钥,所以比较容易被破解。

AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据,相对来说安全很多。

完善的加密算法在理论上是无法破解的,除非使用穷尽法(也称暴力破解)。使用穷尽法破解密钥长度在128位以上的加密数据是不现实的,仅存在理论上的可能性。统计显示,即使使用目前世界上运算速度最快的计算机,穷尽128位密钥也要花上几十亿年的时间,更不用说去破解采用256位密钥长度的AES算法了。

AES是一种对称加密算法,也就是加密和解密使用的是同一把秘钥。

Java实现AES:

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.SecureRandom;public class AESUtil {private static final String KEY_ALGORITHM = "AES";private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";/*** 指定随机字符串(密码)生成密钥** @param randomKey 加解密的密码* @throws Exception*/public static byte[] getSecretKey(String randomKey) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM); //秘钥生成器,指定秘钥算法//初始化此密钥生成器,指定AES的秘钥长度为128if (StringUtils.isBlank(randomKey)) {   //不指定密码keyGenerator.init(128);} else {    //指定密码SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(randomKey.getBytes());keyGenerator.init(128, random);}SecretKey secretKey = keyGenerator.generateKey();   //生成密钥return secretKey.getEncoded();}/*** 加密** @param data 待加密数据* @param key  密钥* @return byte[]   加密数据* @throws Exception*/public static byte[] encrypt(byte[] data, Key key) throws Exception {return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);}/*** 加密** @param data 待加密数据* @param key  二进制密钥* @return byte[]   加密数据* @throws Exception*/public static byte[] encrypt(byte[] data, byte[] key) throws Exception {return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);}/*** 加密** @param data            待加密数据* @param key             二进制密钥* @param cipherAlgorithm 加密算法/工作模式/填充方式* @return byte[]   加密数据* @throws Exception*/public static byte[] encrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {Key k = toKey(key);return encrypt(data, k, cipherAlgorithm);}/*** 加密** @param data            待加密数据* @param key             密钥* @param cipherAlgorithm 加密算法/工作模式/填充方式* @return byte[]   加密数据* @throws Exception*/public static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {Cipher cipher = Cipher.getInstance(cipherAlgorithm);    //获取算法cipher.init(Cipher.ENCRYPT_MODE, key);                  //设置加密模式,并指定秘钥return cipher.doFinal(data);                            //加密数据}/*** 解密** @param data 待解密数据* @param key  二进制密钥* @return byte[]   解密数据* @throws Exception*/public static byte[] decrypt(byte[] data, byte[] key) throws Exception {return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);}/*** 解密** @param data 待解密数据* @param key  密钥* @return byte[]   解密数据* @throws Exception*/public static byte[] decrypt(byte[] data, Key key) throws Exception {return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);}/*** 解密** @param data            待解密数据* @param key             二进制密钥* @param cipherAlgorithm 加密算法/工作模式/填充方式* @return byte[]   解密数据* @throws Exception*/public static byte[] decrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {Key k = toKey(key);return decrypt(data, k, cipherAlgorithm);}/*** 解密** @param data            待解密数据* @param key             密钥* @param cipherAlgorithm 加密算法/工作模式/填充方式* @return byte[]   解密数据* @throws Exception*/public static byte[] decrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {Cipher cipher = Cipher.getInstance(cipherAlgorithm);     //获取算法cipher.init(Cipher.DECRYPT_MODE, key);                   //设置解密模式,并指定秘钥return cipher.doFinal(data);                             //解密数据}/*** 转换密钥** @param secretKey 二进制密钥* @return 密钥*/public static Key toKey(byte[] secretKey) {return new SecretKeySpec(secretKey, KEY_ALGORITHM);   //生成密钥}public static void main(String[] args) throws Exception {String password = "123456";     //加解密的密码byte[] secretKey = getSecretKey(password);Key key = toKey(secretKey);String data = "AES 对称加密算法";System.out.println("明文 :" + data);byte[] encryptData = encrypt(data.getBytes(), key);String encryptDataHex = Hex.encodeHexString(encryptData);   //把密文转为16进制System.out.println("加密 : " + encryptDataHex);byte[] decryptData = decrypt(Hex.decodeHex(encryptDataHex.toCharArray()), key);System.out.println("解密 : " + new String(decryptData));}
}

Java实现对称加密算法-AES加解密相关推荐

  1. Java与Winform进行AES加解密数据传输的工具类与对应关系和示例

    场景 Android+Java中使用Aes对称加密的工具类与使用: Android+Java中使用Aes对称加密的工具类与使用_霸道流氓气质的博客-CSDN博客 上面讲的Java与安卓进行数据传输时使 ...

  2. Java实现非对称加密算法-RSA加解密

    RSA是由三位数学家Rivest.Shamir 和 Adleman 发明的非对称加密算法,这种算法非常可靠,秘钥越长,就越难破解. 目前被破解的最长RSA秘钥是768个二进制位,长度超过768位的秘钥 ...

  3. Java实现aes加解密

    pom文件的依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <depe ...

  4. 基于Java的SQL Server数据库加解密系统设计与实现

    目 录 摘 要 1 ABSTRACT 2 第1章 绪论 3 1.1 数据库加解密系统开发背景 3 1.2 国内外现状 3 1.3 本文的主要工作 4 1.4 论文的组织结构 4 第2章 数据库加密的基 ...

  5. Java使用AES加解密

    Java使用AES加解密 目录 1.1生成密钥 1.2密钥的存储 1.3获取存储的密钥 1.4加解密 1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密.J ...

  6. java aes 工具类_Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  7. Java code lib aes 加解密

    Java aes 加解密 /*** Created by LvJianwei on 2018/2/8.*/import javax.crypto.Cipher; import javax.crypto ...

  8. 记一次Java AES 加解密 对应C# AES加解密 的一波三折

    最近在跟三方对接 对方采用AES加解密 作为一个资深neter Ctrl CV 是我最大的优点 所以我义正言辞的问他们要了demo java demo代码: public class EncryptD ...

  9. java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    [实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...

最新文章

  1. 【转】测试思考——测试人员需要具备哪些素质?
  2. 用存储过程生成记录编号
  3. Linux新建用户图解
  4. JVM(2)——JVM类加载机制
  5. 1.10 编程基础之简单排序 06 整数奇偶排序 python
  6. 一个牛逼的Coder是这样诞生的
  7. TreeMap源码解析
  8. 图片相框展示的设计与实现
  9. 13. 在O(1)时间删除链表节点(C++版本)
  10. LinGo基本用法总结
  11. idea更改页面背景颜色设置为护眼颜色
  12. 计算机折线图教程,excel怎么插入折线图 excel怎么将多个折线图合并
  13. 磅 英寸 厘米 dpi 像素
  14. 体验灵魂出窍:错觉延伸人体对自身感觉
  15. recyclerView + editTextView 编辑图片和文字标题 问题
  16. TMS320F280049C 学习笔记10 控制率加速器 Control Law Accelerator (CLA) 入门
  17. 诺基亚联手迪信通 力推内置仙剑三版5230手机
  18. 华为发布5G“天罡”“巴龙5000”芯片 5G折叠屏手机2月发布
  19. 新冠「阳了」,如何稳定情绪,做好心理自救?
  20. div +css 纵向导航

热门文章

  1. 《人月神话》阅读笔记一
  2. (转载)C语言右移运算符的问题(特别当与取反运算符一起时)
  3. 6410 spi 设备驱动
  4. 简单实现系统托盘 - 回复 闪 的问题
  5. FinTech领域的风险控制——风险篇
  6. JZOJ 1035. 【SCOI2009】粉刷匠
  7. Linux 内核PCI去除一个设备
  8. Pycharm报错解决:error:please select a valid Python interpreter 及一些基本设置
  9. UED、UCD、UE、UI、交互设计概念
  10. 01.26 小组功能初步总结