package com.smt.cipher.symmetry;

import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.util.Base64; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey; /**
* DES 工具
* @author ZHANGYUKUN
*
*/
public class AESUtil {
public static final String ENCODING = Charset.defaultCharset().name(); /**
* 加密
* @param data 原文
* @param cipherStr 秘钥字符字符串(8的倍数)
* @return
*/
public static String encrypt( String content , String secretkeyStr ) {
String rt = null;
try {
byte[] data = getDESCipher(secretkeyStr, Cipher.ENCRYPT_MODE ).doFinal( content.getBytes(ENCODING) );
rt = new String(Base64.getEncoder().encode(data), ENCODING);
} catch (Exception e) {
e.printStackTrace();
}
return rt;
} /**
* 解密
* @param data 解密
* @param cipherStr 秘钥字符串(8的倍数)
* @return
*/
public static String descrypt(String data , String secretkeyStr) {
String rt = null;
try {
byte[] cipher = getDESCipher(secretkeyStr, Cipher.DECRYPT_MODE ).doFinal( Base64.getDecoder().decode( data.getBytes() ) );
rt = new String( cipher,ENCODING );
} catch (Exception e) {
e.printStackTrace();
}
return rt;
} /**
* 得到密码
* @param secretkeyStr
* @param mode
* @return
*/
public static Cipher getDESCipher( String secretkeyStr,int mode ) {
int remainder = secretkeyStr.length()%8;
if( remainder != 0 ) {
throw new RuntimeException("秘钥字符串必须是8的倍数");
} try {
KeyGenerator keygen =KeyGenerator.getInstance("AES");
keygen.init(128, new SecureRandom(secretkeyStr.getBytes(ENCODING)));
SecretKey secretKey=keygen.generateKey(); Cipher cipher = Cipher.getInstance("AES");
cipher.init( mode , secretKey );
return cipher;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }

  

测试一下:

package com.smt.cipher;

import java.security.NoSuchAlgorithmException;

import com.smt.cipher.symmetry.AESUtil;

public class Main {

	public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println( AESUtil.encrypt("测试文件AES", "abcdabcd") );
System.out.println( AESUtil.descrypt( AESUtil.encrypt("测试文件AES", "abcdabcd") , "abcdabcd") );
} }

  

输出:

代码git 下载地址:https://github.com/hualiuwuxin/tools.git

AES 加解密 Java实现的更多相关文章

  1. Java、C#双语版配套AES加解密示例

      这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...

  2. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密

    前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...

  3. 转载:Java、C#双语版配套AES加解密示例

    转载,原文出处 http://www.cnblogs.com/lzrabbit/p/3639503.html 这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己 ...

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

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

  5. C#与java中的AES加解密互解算法

    一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...

  6. Java中的AES加解密工具类:AESUtils

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

  7. AES加解密异常java.security.InvalidKeyException: Illegal key size

    AES加解密异常 Java后台AES解密,抛出异常如下:java.security.InvalidKeyException: Illegal key size Illegal key size or ...

  8. java AES加解密

    AES加解密工具类 package com.yan.demo; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64D ...

  9. aes加解密 Illegal key size

    做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...

随机推荐

  1. 字符界面的贪吃蛇--链表--C++

    前天看了下链表,由于平时对链表的使用不多,所以对链表的应用也没什么了解,所以想来想去,就想用链表实现一下贪吃蛇. 下面言归正传,先看效果图,再看代码,其他没有了! 图1: 图2: 代码: #inclu ...

  2. JetBrains Goland 2018.2.1最新版破解

    JetBrains GoLand 2018.2.1破解版是JetBrains的新商业IDE,旨在为Go开发提供符合人体工程学的环境.新的IDE通过特定于Go语言的编码辅助和工具集成扩展了Intelli ...

  3. 在Ubuntu上搭建IntelliJ IDEA license server服务器

    1.下载激活文件 2.ubuntu需要使用 IntelliJIDEALicenseServer_linux_amd64 ,把该文件传到服务器的某个目录,我是放在了/jideal 下 3.进入上面的目录 ...

  4. OpenID

    OpenId是一个以用户为中心的数字身份识别框架,它具有开放.分散.自由等特性.OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站.同样,我们也可以通过这样的方式 ...

  5. 转 linux常用查看硬件设备信息命令

    转载自:http://blog.chinaunix.net/uid-26782198-id-3242120.html 系统 # uname -a               # 查看内核/操作系统/C ...

  6. 启发式搜索A-Star算法 【寻找 最短路径 算法】【地理几何位置 可利用的情况】

    在处理最短路径问题时,有一种启发式算法是我们应该了解的,由于其有着优秀的探索效率在各自现实项目中多有应用,它就是 A-star 算法,或  A*  算法. 个人观点: A*  算法并不保证找到的路径一 ...

  7. input标签(图像域和隐藏域)

    图像域(图像提交按钮): <input type="image" name="..." src="imageurl"  /> 隐 ...

  8. 20155219 2016-2017-2 《Java程序设计》第10周学习总结

    20155219 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计 ...

  9. READ–IT: Assessing Readability of Italian Texts with a View to Text Simplification-paper

    https://aclanthology.info/pdf/W/W11/W11-2308.pdf 2 background2000年以前 ----传统可读性准则局限于表面的文本特征,例如the Fle ...

  10. 命令提示符操作及Java的特点

    day1_3 命令提示符的操作 GUI 图形化方式(可视化) CLI 命令行方式 (编程方式) dir 列出当前目录下文件及文件夹 md 创建文件夹 rd 删除文件夹(只能删除空文件夹) cd 进入指 ...