本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:
package com.soufun.com;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* @author WHD
*/
public class AesUtil {
private static final String AES="AES";
private static final String UTF8="UTF-8";
static KeyGenerator kgen =null;
static{
try {
kgen= KeyGenerator.getInstance(AES);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* @param content:
* @param password:
*/
private static byte[] encrypt(String content, String password) {
try {
// 使用静态代码块来生成KeyGenerator对象
//KeyGenerator kgen = KeyGenerator.getInstance(AES);
// 使用128 位
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] encodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(AES);
// 加密内容进行编码
byte[] byteContent = content.getBytes(UTF8);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key);
// 正式执行加密操作
byte[] result = cipher.doFinal(byteContent);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/*
* @param content:
* @param password:
*/
private static byte[] decrypt(byte[] content, String password) {
try {// 使用静态代码块来生成KeyGenerator对象
//KeyGenerator kgen = KeyGenerator.getInstance(AES);
// 使用128 位
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] encodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(AES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key);
// 正式执行解密操作
byte[] result = cipher.doFinal(content);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 二进制--》十六进制转化
* @param buf
* @return
*/
private static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 十六进制--》二进制转化
* @param hexStr
* @return
*/
private static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1) {
return null;
}
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
public static void main(String[] args) throws UnsupportedEncodingException {
long begin=new Date().getTime();
String content = "aaades加密测试";
String password = "12345678dd";
// 加密
System.out.println("加密前:" + content);
byte[] encryptResult = encrypt(content, password);
String encryptResultStr = parseByte2HexStr(encryptResult);
System.out.println("加密后:" + encryptResultStr);
// 解密
byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);
byte[] decryptResult = decrypt(decryptFrom, password);
// 解密内容进行解码
String result = new String(decryptResult, UTF8);
System.out.println("解密后:" + result);
long end= new Date().getTime();
System.out.println(end-begin);
}
}
注:SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行,可以复原这个序列。
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
密码安全性在线检测:
http://tools./password/my_password_safe
高强度密码生成器:
http://tools./password/CreateStrongPassword
迅雷、快车、旋风URL加密/解密工具:
http://tools./password/urlrethunder
在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools./password/sha_encode
希望本文所述对大家java程序设计有所帮助。
# java
# AES
# 对称
# 加密算法
# 加密
# 解密
# Java AES256加密解密示例代码
# java使用RSA与AES加密解密的实例代码详解
# Java使用Hutool实现AES、DES加密解密的方法
# Java使用AES加密和解密的实例详解
# Java AES加密解密的简单实现方法
# Java与Node.js利用AES加密解密出相同结果的方法示例
# Java实现的AES256加密解密功能示例
# java使用Hex编码解码实现Aes加密解密功能示例
# Android、iOS和Java通用的AES128加密解密示例代码
# JAVA中AES对称加密和解密过程
# Java AES加密和解密教程
# 加密工具
# 随机数
# 还可以
# 感兴趣
# 就行
# 给大家
# 所述
# 程序设计
# 高强度
# 加密解密
# 只要有
# 讲述了
# generated
# block
# TODO
# Auto
# content
# password
# printStackTrace
# param
相关文章:
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何用腾讯建站主机快速创建免费网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何在云服务器上快速搭建个人网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何通过西部建站助手安装IIS服务器?
香港服务器部署网站为何提示未备案?
如何快速搭建二级域名独立网站?
如何快速生成ASP一键建站模板并优化安全性?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
网站制作免费,什么网站能看正片电影?
如何通过远程VPS快速搭建个人网站?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站之星图片链接生成指南:自助建站与智能设计教程
昆明网站制作哪家好,昆明公租房申请网上登录入口?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
企业微网站怎么做,公司网站和公众号有什么区别?
建站之星在线客服如何快速接入解答?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何通过VPS搭建网站快速盈利?
如何在阿里云购买域名并搭建网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站之星后台密码遗忘?如何快速找回?
建站主机选购指南:核心配置优化与品牌推荐方案
Python多线程使用规范_线程安全解析【教程】
建站org新手必看:2024最新搭建流程与模板选择技巧
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
广德云建站网站建设方案与建站流程优化指南
nginx修改上传文件大小限制的方法
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
网站制作公司,橙子建站是合法的吗?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
已有域名如何快速搭建专属网站?
如何快速搭建FTP站点实现文件共享?
建站VPS推荐:2025年高性能服务器配置指南
如何通过宝塔面板实现本地网站访问?
linux top下的 minerd 木马清除方法
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
专业网站建设制作报价,网页设计制作要考什么证?
如何有效防御Web建站篡改攻击?
测试制作网站有哪些,测试性取向的权威测试或者网站?
小型网站建站如何选择虚拟主机?
香港服务器如何优化才能显著提升网站加载速度?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
广州建站公司哪家好?十大优质服务商推荐
*请认真填写需求信息,我们会在24小时内与您取得联系。