/*
* Jdk 如需要实现 256 位密钥,则需要获取无政策限制权限文件
*/
public class AesEncryptionUtilsByJdk {

private static final SecureRandom RANDOM = new SecureRandom();

private static final String KEY_ALGORITHM = "AES";

private static final String CIPHER_ALGORITHM = "AES/OFB/PKCS5Padding";

private static final int DEFAULT_KEY_LENGTH = 256;

// IV 初始化向量 ,需要随机哈,要与加密共保存。
private static final String IV = "2685aed1945ab91a40d309c7dad00228";

private static final String DEFAULT_KEY = "91c6af915daa99a8ba7eba3a54d489104723e14149ab6c69660da22a0a0ebee3";

/*
* 加密
*
* @param data 待加密字串
* @return 解密后字串
*/
public static String encrypt (String data, String keyHexStr) {
try {
Key key = new SecretKeySpec(hexToByte(keyHexStr), KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(hexToByte(IV)));
byte[] encryptBytes = cipher.doFinal(data.getBytes());
return byteToHex(encryptBytes);
}catch (Exception e){
e.printStackTrace();
return null;
}
}

public static String encrypt (String data) {
return encrypt(data, DEFAULT_KEY);
}

/*
* 解密
*
* @param data 待解密字串
* @return 解密后字串
*/
public static String decrypt (String data, String keyHexStr) {
try {
Key key = new SecretKeySpec(hexToByte(keyHexStr), KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(hexToByte(IV)));
return new String(cipher.doFinal(hexToByte(data)));
}catch (Exception e){
e.printStackTrace();
return null;
}
}

public static String decrypt (String data) {
return decrypt(data, DEFAULT_KEY);
}

/*
* 生成密钥(亦可以在配置文件中配置固定密钥)
*
* @param keyLength 待生成密钥长度
* @return 密钥16进制字串
*/
public static String generateKey (int keyLength) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
keyGenerator.init(keyLength, RANDOM);
SecretKey secretKey = keyGenerator.generateKey();
return byteToHex(secretKey.getEncoded());
}catch (Exception e){
e.printStackTrace();
return null;
}
}

public static String generateKey () {
return generateKey(DEFAULT_KEY_LENGTH);
}

private static String byteToHex(byte[] bytes){
String strHex = "";
StringBuilder sb = new StringBuilder();
for (byte aByte : bytes) {
strHex = Integer.toHexString(aByte & 0xFF);
sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每个字节由两个字符表示,位数不够,高位补0
}
return sb.toString().trim();
}

private static byte[] hexToByte(String hex){
int m = 0, n = 0;
int byteLen = hex.length() / 2;
byte[] ret = new byte[byteLen];
for (int i = 0; i < byteLen; i++) {
m = i * 2 + 1;
n = m + 1;
int intVal = Integer.decode("0x" + hex.substring(i * 2, m) + hex.substring(m, n));
ret[i] = (byte) intVal;
}
return ret;
}

public static String generateIV(){
byte[] ivBytes = new byte[16];
RANDOM.nextBytes(ivBytes);
return byteToHex(ivBytes);
}
}

class Main {
public static void main(String[] args) throws Exception {
String src = "测试待加密数据123456789";
String iv = AesEncryptionUtilsByJdk.generateIV();
System.out.println(iv);
String encryptStr = "ed856e8871798ed42d796ac2965503fffe3405bb1eddb683d160c785e16fbc5c";
String decryptStr = AesEncryptionUtilsByJdk.decrypt(encryptStr);
System.out.println(encryptStr);
System.out.print(decryptStr);
}
}

AES - JAVA相关推荐

  1. mysql aes java解密_加密/解密的Java函數,如Mysql的AES_ENCRYPT和AES_DECRYPT

    1 If you need the code to decrypt the algorithm is here JAVA 如果你需要代碼解密算法就在這里JAVA public static Strin ...

  2. Java笔记-对称加密AES的使用

    AES加密库的使用: ·根据AES密钥创建Secret密钥向量: ·生成初始化参数向量: ·获取AES Cipher: ·执行加密: ·Base64编码(建议) 程序运行截图如下: 调用如下: pub ...

  3. java aes 中文_java实现AES加密(解决中文解密后乱码问题,解决传输字符串后解密报错的问题)...

    在对安全性要求比较高的报文做加密的时候,算法有很多种,我这里主要用到的就是AES加密算法.由于在国内使用,所以不可避免的要对中文进行加密和解密,而在这个过程中,发现,如果不做处理,很容易会出现中文乱码 ...

  4. AES加密算法 Java与Python跨平台实现

    AES加密算法 Java与Python跨平台实现 什么是AES Java的实现 Python的实现 结果 什么是AES Note: 网上有很多实现代码但是鱼龙混杂,笔者摸索了半天,实现了AES加密文本 ...

  5. JSch:纯JAVA实现远程执行SSH2主机的SHELL命令

    http://txy821.iteye.com/blog/1405230 http://my.oschina.net/hetiangui/blog/137426 上篇文章我编写了利用JSch实现SFT ...

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

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

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

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

  8. 慕课网_《Java实现对称加密》学习总结

    时间:2017年4月11日星期二 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学示例源码:https://github.com/zccodere/s... 个 ...

  9. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

    <Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...

最新文章

  1. ETCD-节点挂掉会怎样?
  2. Spring源码:IOC容器
  3. python如何处理数据_python数据处理之如何选取csv文件中某几行的数据
  4. java环境变量的作用和含义_java环境变量的配置及各环境变量的含义 | 学步园
  5. 三种1:4传输线变压器巴伦的分析
  6. 【重磅】新智元推出百万级AI智库资讯互动平台,AI World2017世界人工智能大会TOP10大奖榜单发布
  7. finecms存在任意文件上传漏洞复现
  8. flutter学习笔记之Dart-8 问号、双问号、感叹号的理解
  9. 32位cpu和64位cpu对内存地址和内存单元的差别
  10. vivado ooc综合
  11. 远程桌面桌面无法找到计算机,Windows – 远程桌面客户端找不到远程计算机
  12. 基于cuda10.0的pytorch深度学习环境配置
  13. VSCode配置文件“.vscode/c_cpp_properties.json”不断被覆盖的原因及解决方法
  14. 软件构架实践 第2版 学习笔记
  15. 【Python】Decision on buying cars COROLLA or LEVIN(数据分析技术实现过程之·2 data_analysis①)
  16. python基础笔试面试题_python基础面试常见题
  17. Armadillo安装
  18. Oracle建库建表
  19. MYSQL原理、设计与应用
  20. python scrapy安装_Python安装Scrapy

热门文章

  1. 基于Echarts实现可视化数据大屏百度地图医疗大数据模板
  2. 庆贺杭州、广州、大连分公司相继成立,TechExcel发展驶入快车道
  3. python 描述符
  4. ps制作256色(8位)bmp图片的步骤
  5. 超高校级の清晰语法分析中短语相关概念总结
  6. 深大c语言程序设计题库,深大复试C语言程序.doc
  7. 计算机用户日记怎么查询,谁登了我的电脑?教你如何查看Windows事件日志
  8. 华中农业大学 计算机考研,华中农业大学考研难吗?一般要什么水平才可以进入?...
  9. Nginx安装启动后无法访问(访问拒绝连接)
  10. [2019BUAA软件工程]个人期末总结感想