JAVA 实现AES加密解密
AES加密模式有ECB,CBC,CTR等
AES填充模式有pkcs5padding, pkcs7padding, no padding等
AES数据块则有128位 192位 256位
AES加密密码,如果选择数据块128位,则要求密码长度为16,数据块192位则要求密码长度为24,数据块长度为256位,则要求密码长度为32
AES的偏移量和AES加密类似
AES输出则有base64和hex两种
AES字符集有gb2312,gbk,utf-8等
1 使用CBC+PKCS5Padding+base64+utf-8 做加密解密,代码如下
/***加密操作* @param content 待加密内容* @param encodingFormat 编码方式* @param sKey 密码* @param ivParameter 偏移量* @return* @throws Exception*/public String encrypt(String content, String encodingFormat, String sKey, String ivParameter) {try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");byte[] raw = sKey.getBytes();SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] encrypted = cipher.doFinal(content.getBytes(encodingFormat));return Base64Utils.encodeBase64String(encrypted);}catch (Exception e){log.error("data {} encrypt on error {}",content,e);}return null;}/***解密操作* @param content 待解密内容* @param encodingFormat 编码方式* @param sKey 密码* @param ivParameter 偏移量* @return* @throws Exception*/public String decrypt(String content, String encodingFormat, String sKey, String ivParameter) {try {byte[] raw = sKey.getBytes("ASCII");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] encrypted1 = Base64Utils.decodeBase64(content);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original, encodingFormat);return originalString;} catch (Exception ex) {log.error("data {} decrypt on error {}",content,e);}return null;}
2 使用CBC+no padding+hex+utf-8 做加密解密,代码如下
注意:此方式加密或者解密内容字节长度必须为16的整数倍,否则会报错
/***加密操作* @param content 待加密内容* @param encodingFormat 编码方式* @param sKey 密码* @param ivParameter 偏移量* @return* @throws Exception*/public String encrypt(String content, String encodingFormat, String sKey, String ivParameter) {try {byte[] raw = sKey.getBytes();SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/nopadding");IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);while (content.getBytes(encodingFormat).length % 16 != 0){content+=" ";}byte[] encrypted = cipher.doFinal(content.getBytes(encodingFormat));return Hex.encodeHexString(encrypted).toUpperCase(Locale.ROOT);}catch (Exception e){log.error("data {} decrtpy on error {}",content,e);}return null;}/***解密操作* @param content 待解密内容* @param encodingFormat 编码方式* @param sKey 密码* @param ivParameter 偏移量* @return* @throws Exception*/public String decrypt(String content, String encodingFormat, String sKey, String ivParameter) {try {byte[] raw = sKey.getBytes("ASCII");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/nopadding");IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] bytes = Hex.decodeHex(content);byte[] original = cipher.doFinal(bytes);String originalString = new String(original, encodingFormat);return originalString;} catch (Exception ex) {log.error("data {} decrtpy on error {}",content,ex);}return null;}
JAVA 实现AES加密解密相关推荐
- java php aes加密解密_php aes 加密解密可与java对接
php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...
- ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密
**PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...
- Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用来替代原先的 ...
- java android aes加密解密_AES加密解密在JAVA和ANDROID下互通
昨天外包安卓的那个人说AES的加解密结果不一样.于是百度搜索发现还真是! 贴上AES加密核心: Cipher cipher = Cipher.getInstance("AES/CBC/PKC ...
- java aes加密 base64_【java】AES加密解密|及Base64的使用
AES加解密算法,使用Base64做转码以及辅助加密: package com.wintv.common; import javax.crypto.Cipher; import javax.crypt ...
- java实现AES加密解密
public class PartnerSign {private PartnerSign() {}/*** AES加密方法** @param content 明文内容* @param passwor ...
- CryptoJS、Java中aes加密解密
前台 加密 // 16进制密文 function aesHexCryptoAesEncryption(word) {if (typeof (word) === 'object') { // 对象格式的 ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- AES加密解密算法Java实现
AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...
- java AES加密解密
近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位 ...
最新文章
- win10突然打开matlab闪退,win10上的应用打开会闪退,直接闪退
- 【BZOJ4821】【SDOI2017】相关分析 [线段树]
- 煮茶社区AVR开发板第二版[转]
- Python-复习-习题-13
- java metapojo_hibernate错误[org.hibernate.tuple.entity.PojoEntityTuplizer],这是什么错误,怎么解决?...
- ASP.NET MVC4中的异步控制器
- Silverlight 3正式版新鲜出炉
- python framework jdon_python – Django Rest Framework和JSONField
- CocosCreator编辑器界面
- android获取截屏图片大小,【Android】android获取长图截屏(显示之外的也要)
- 统一建模语言UML概述
- [UPF]理解UPF功率域和域边界
- CWE-123: Write-what-where Condition(任意写入)
- python 离散数学 判断单射 双射 满射
- C语言候老师,两本留言册背后的C语言老师
- 使用Android Studio 开发地图案例之二(展示普通图、卫星图、交通流量图和百度城市热力图)
- snubber电路总结
- 4月11日 星期六
- 【Hardware】【磁保持继电器基础知识】
- 强化学习之CartPole游戏(Q-learning)
热门文章
- mp-mtgsig 美团iOS 签名逆向工程分析
- uni-app 使用蓝牙打印机ESC/POS指令基础方法
- android 看电脑视频,超级看电脑在线观看方法教程详解_丝瓜视频安卓版
- —— GPS测量原理及应用复习-7 ——
- Linux下ps -ef和ps aux
- java 注解 controller_@Controller注解
- Carthagecocopads 摘抄笔记
- 会使您势不可挡的程序员的行为
- php301劫持,黑帽seo技巧-301权重代码劫持
- java 斑马 打印不出来_通过PrintServer将原始ZPL发送到Zebra打印机不起作用