版权声明:本文为博主原创文章,转载请注明出处。
[java] view plain copy
print?在CODE上查看代码片派生到我的代码片package com.stone.security;  import java.util.Arrays;  import javax.crypto.Cipher;  import javax.crypto.KeyGenerator;  import javax.crypto.SecretKey;  import javax.crypto.spec.IvParameterSpec;  /** * AES 算法 对称加密,密码学中的高级加密标准 2005年成为有效标准  * @author stone * @date 2014-03-10 06:49:19 */  public class AES {  static Cipher cipher;  static final String KEY_ALGORITHM = "AES";  static final String CIPHER_ALGORITHM_ECB = "AES/ECB/PKCS5Padding";  /* *  */  static final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding";  /*  * AES/CBC/NoPadding 要求 * 密钥必须是16位的;Initialization vector (IV) 必须是16位 * 待加密内容的长度必须是16的倍数,如果不是16的倍数,就会出如下异常: * javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes *  *  由于固定了位数,所以对于被加密数据有中文的, 加、解密不完整 *   *  可 以看到,在原始数据长度为16的整数n倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n, *  其它情况下加密数据长 度等于16*(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16*n+m[其中m小于16], *  除了NoPadding填充之外的任何方 式,加密数据长度都等于16*(n+1). */  static final String CIPHER_ALGORITHM_CBC_NoPadding = "AES/CBC/NoPadding";   static SecretKey secretKey;  public static void main(String[] args) throws Exception {  method1("a*jal)k32J8czx囙国为国宽");  method2("a*jal)k32J8czx囙国为国宽");  method3("a*jal)k32J8czx囙国为国宽");  method4("123456781234囙为国宽");// length = 16  method4("12345678abcdefgh");// length = 16
              }  /** * 使用AES 算法 加密,默认模式  AES/ECB */  static void method1(String str) throws Exception {  cipher = Cipher.getInstance(KEY_ALGORITHM);  //KeyGenerator 生成aes算法密钥  secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();  System.out.println("密钥的长度为:" + secretKey.getEncoded().length);  cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥  byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
              System.out.println("method1-加密:" + Arrays.toString(encrypt));  cipher.init(Cipher.DECRYPT_MODE, secretKey);//使用解密模式初始化 密钥  byte[] decrypt = cipher.doFinal(encrypt);  System.out.println("method1-解密后:" + new String(decrypt));  }  /** * 使用AES 算法 加密,默认模式 AES/ECB/PKCS5Padding */  static void method2(String str) throws Exception {  cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB);  //KeyGenerator 生成aes算法密钥  secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();  System.out.println("密钥的长度为:" + secretKey.getEncoded().length);  cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥  byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
              System.out.println("method2-加密:" + Arrays.toString(encrypt));  cipher.init(Cipher.DECRYPT_MODE, secretKey);//使用解密模式初始化 密钥  byte[] decrypt = cipher.doFinal(encrypt);  System.out.println("method2-解密后:" + new String(decrypt));  }  static byte[] getIV() {  String iv = "1234567812345678"; //IV length: must be 16 bytes long  return iv.getBytes();  }  /** * 使用AES 算法 加密,默认模式 AES/CBC/PKCS5Padding */  static void method3(String str) throws Exception {  cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);  //KeyGenerator 生成aes算法密钥  secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();  System.out.println("密钥的长度为:" + secretKey.getEncoded().length);  cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用加密模式初始化 密钥  byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
              System.out.println("method3-加密:" + Arrays.toString(encrypt));  cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用解密模式初始化 密钥  byte[] decrypt = cipher.doFinal(encrypt);  System.out.println("method3-解密后:" + new String(decrypt));  }  /** * 使用AES 算法 加密,默认模式 AES/CBC/NoPadding  参见上面对于这种mode的数据限制 */  static void method4(String str) throws Exception {  cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC_NoPadding);  //KeyGenerator 生成aes算法密钥  secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();  System.out.println("密钥的长度为:" + secretKey.getEncoded().length);  cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用加密模式初始化 密钥  byte[] encrypt = cipher.doFinal(str.getBytes(), 0, str.length()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
              System.out.println("method4-加密:" + Arrays.toString(encrypt));  cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用解密模式初始化 密钥  byte[] decrypt = cipher.doFinal(encrypt);  System.out.println("method4-解密后:" + new String(decrypt));  }  }  

转载于:https://www.cnblogs.com/Free-Thinker/p/5824668.html

Java加密算法 AES相关推荐

  1. JAVA加密算法AES相关代码实现

    AES 是一种对称加密算法(即加密和解密使用的是相同的密钥)对称加密的速度快但安全性较差 AES的分组长度是128bit,三种可选密钥长度128bit,192bit和256bit. 密文 = 明文 + ...

  2. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  3. Java实现对称加密算法-AES加解密

    AES(Advanced Encryption Standard)意思是高级加密标准,是一种区块加密标准.这个标准用来替代原先的DES,且已经被广泛使用. DES使用56位密钥,所以比较容易被破解. ...

  4. Java实现AES加密算法

    最近恶补了一些关于加密算法的知识,然后用编程语言来实现 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个 ...

  5. JAVA:实现AES 加密算法(附完整源码)

    JAVA:实现AES 加密算法 package com.thealgorithms.ciphers;import javax.crypto.*; import java.security.Invali ...

  6. JAVA加密--AES加密算法JAVA实现及使用中的各种坑,超实用

    1. AES 1.1. 概念 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用 ...

  7. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

    对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...

  8. 非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密

    非对称加密 公钥私钥 抽象 这是涵盖Java加密算法的三部分博客系列的第3部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文 ...

  9. 选择Java加密算法第2部分–单密钥对称加密

    抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-25 ...

最新文章

  1. 注释里的诅咒:哪种语言遭受最多的咒骂?
  2. dpkg status database is locked by another process
  3. 黑夜主权个人团队主页html源码
  4. linux中cat监控,Linux基本命令——cat、rev、head、tail
  5. 轮距和轴距有什么区别_大热的“机能风”是什么?看完领克02 PHEV你就懂了
  6. [翻译]A MAP BASED ON LASERSCANS WITHOUT GEOMETRIC INTERPRETATION
  7. [禅悟人生]先将小事做好再来修禅心
  8. ROS之choro功能包
  9. 编译SAM BA报错
  10. 【CTFhub】彩蛋篇_持续更新
  11. [Unity]使用状态机模式创建平台控制游戏(以Unity酱为例)
  12. android 手机处理器,安卓手机处理器性能排行 你的手机能排第几?
  13. 忘记准考证号获取四六级成绩的方法
  14. 计算机桌面个性化怎样设置方法,桌面文件夹图标个性化【设置方法】
  15. 【平差软件学习---科傻】三、平面导线平差
  16. Java实现视频通话
  17. 满足互动、发出用户民意的BBS论坛
  18. 看过来!看过来!网络安全类的认证课程都在这里
  19. 微信小程序 - [完整源码] 全屏左右菜单联动效果,左侧分类与右侧内容联动,类似美团饿了么的点餐页面 “左边菜单,右边内容“ 效果(开箱即用的示例源码,代码干净整洁且注释详细)
  20. Java斐波那契数列

热门文章

  1. lower_bound()、upper_bound()
  2. 注视点估计(二维法)
  3. 牛顿插值多项式(python实现)
  4. 【电商日志项目之七】项目调优
  5. (十三)事件分发器——event()函数,事件过滤
  6. Class.getResources()和classLoader.getResources()区别
  7. python爬虫——利用BeautifulSoup4爬取糗事百科的段子
  8. 【Python之路】第五篇--Python基础之杂货铺
  9. thinkphp3.0部分总结
  10. 线段树——单点更新(二)