Java加密算法 AES
版权声明:本文为博主原创文章,转载请注明出处。 [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相关推荐
- JAVA加密算法AES相关代码实现
AES 是一种对称加密算法(即加密和解密使用的是相同的密钥)对称加密的速度快但安全性较差 AES的分组长度是128bit,三种可选密钥长度128bit,192bit和256bit. 密文 = 明文 + ...
- java aes php_php和java的aes默认加密算法有点区别及解决方法。
1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...
- Java实现对称加密算法-AES加解密
AES(Advanced Encryption Standard)意思是高级加密标准,是一种区块加密标准.这个标准用来替代原先的DES,且已经被广泛使用. DES使用56位密钥,所以比较容易被破解. ...
- Java实现AES加密算法
最近恶补了一些关于加密算法的知识,然后用编程语言来实现 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个 ...
- JAVA:实现AES 加密算法(附完整源码)
JAVA:实现AES 加密算法 package com.thealgorithms.ciphers;import javax.crypto.*; import java.security.Invali ...
- JAVA加密--AES加密算法JAVA实现及使用中的各种坑,超实用
1. AES 1.1. 概念 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用 ...
- 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密
对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...
- 非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密
非对称加密 公钥私钥 抽象 这是涵盖Java加密算法的三部分博客系列的第3部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文 ...
- 选择Java加密算法第2部分–单密钥对称加密
抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-25 ...
最新文章
- 注释里的诅咒:哪种语言遭受最多的咒骂?
- dpkg status database is locked by another process
- 黑夜主权个人团队主页html源码
- linux中cat监控,Linux基本命令——cat、rev、head、tail
- 轮距和轴距有什么区别_大热的“机能风”是什么?看完领克02 PHEV你就懂了
- [翻译]A MAP BASED ON LASERSCANS WITHOUT GEOMETRIC INTERPRETATION
- [禅悟人生]先将小事做好再来修禅心
- ROS之choro功能包
- 编译SAM BA报错
- 【CTFhub】彩蛋篇_持续更新
- [Unity]使用状态机模式创建平台控制游戏(以Unity酱为例)
- android 手机处理器,安卓手机处理器性能排行 你的手机能排第几?
- 忘记准考证号获取四六级成绩的方法
- 计算机桌面个性化怎样设置方法,桌面文件夹图标个性化【设置方法】
- 【平差软件学习---科傻】三、平面导线平差
- Java实现视频通话
- 满足互动、发出用户民意的BBS论坛
- 看过来!看过来!网络安全类的认证课程都在这里
- 微信小程序 - [完整源码] 全屏左右菜单联动效果,左侧分类与右侧内容联动,类似美团饿了么的点餐页面 “左边菜单,右边内容“ 效果(开箱即用的示例源码,代码干净整洁且注释详细)
- Java斐波那契数列
热门文章
- lower_bound()、upper_bound()
- 注视点估计(二维法)
- 牛顿插值多项式(python实现)
- 【电商日志项目之七】项目调优
- (十三)事件分发器——event()函数,事件过滤
- Class.getResources()和classLoader.getResources()区别
- python爬虫——利用BeautifulSoup4爬取糗事百科的段子
- 【Python之路】第五篇--Python基础之杂货铺
- thinkphp3.0部分总结
- 线段树——单点更新(二)