书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
目录 / 分类
数据库基础
数据库原理
SQL语言
网络原理
DB4O
Access
基础知识
驱动及连接
试题参考
技术手册
应用案例
常见问题
SQLServer
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
MySQL
基础知识
驱动连接
管理工具
技术手册
应用案例
常见问题
SQLite
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
Oracle
基础知识
驱动连接
管理工具
技术手册
应用案例
常见问题
PostgreSQL
基础知识
驱动及连接
管理工具
技术手册
应用案例
常见问题
移动应用
JavaME
Android
微信开发
经验分享
Java组件
Java开发
应用办公
常见问题解决
Delphi
硬件故障解决
WEB
HTML5
Javascript
速查表
文件同步
服务器配置
Apache
Tomcat
Resin
协议&概念
IIS&ASP
win&linux
Absolute Database
nginx
OpenFire
Redis
freeswitch
网文摘录
IT杂谈
网文转载
行业新闻
热点推荐
下载中心
软件下载
CUBRID数据库
介绍及使用
验证/二维/条形码
验证码原理及实现
二维码相关
条形码相关
在线二维码生成
在线条形码生成
当前位置:
首页
>
经验分享
>
Java组件
JAVA实现AES加密
AES是美国联邦政府采用的商业及政府数据加密标准,预计将在未来几十年里代替DES在各个领域中得到广泛应用。AES提供128位密钥,因此,128位AES的加密强度是56位DES加密强度的1021倍还多。假设可以制造一部可以在1秒内破解DES密码的机器,那么使用这台机器破解一个128位AES密码需要大约149亿万年的时间。(更深一步比较而言,宇宙一般被认为存在了还不到200亿年)因此可以预计,美国国家标准局倡导的AES即将作为新标准取代DES。
Java代码
package
com.jshx.utils;
import
java.io.UnsupportedEncodingException;
import
java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException;
import
java.security.SecureRandom;
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;
import
org.apache.axis.encoding.Base64;
public
class
AES {
/**
* 加密
*
* @param content 需要加密的内容
* @param password 加密密码
* @return
*/
public
static
byte
[] encrypt(String content, String password) {
try
{
KeyGenerator kgen = KeyGenerator.getInstance(
"AES"
);
kgen.init(
128
,
new
SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte
[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key =
new
SecretKeySpec(enCodeFormat,
"AES"
);
Cipher cipher = Cipher.getInstance(
"AES"
);
// 创建密码器
byte
[] byteContent = content.getBytes(
"utf-8"
);
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 解密密钥
* @return
*/
public
static
byte
[] decrypt(
byte
[] content, String password) {
try
{
KeyGenerator kgen = KeyGenerator.getInstance(
"AES"
);
kgen.init(
128
,
new
SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte
[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key =
new
SecretKeySpec(enCodeFormat,
"AES"
);
Cipher cipher = Cipher.getInstance(
"AES"
);
// 创建密码器
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
;
}
/**将二进制转换成16进制
* @param buf
* @return
*/
public
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();
}
/**将16进制转换为二进制
* @param hexStr
* @return
*/
public
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;
}
/**
* 加密
*
* @param content 需要加密的内容
* @param password 加密密码
* @return
*/
public
static
byte
[] encrypt2(String content, String password) {
try
{
SecretKeySpec key =
new
SecretKeySpec(password.getBytes(),
"AES"
);
Cipher cipher = Cipher.getInstance(
"AES/ECB/NoPadding"
);
byte
[] byteContent = content.getBytes(
"utf-8"
);
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
;
}
public
static
void
main(String[] args) {
String content =
"test"
;
String password =
"12345678"
;
//加密
System.out.println(
"加密前:"
+ content);
byte
[] encryptResult = encrypt(content, password);
String tt4 = Base64.encode(encryptResult);
System.out.println(
new
String(tt4));
//解密
byte
[] decryptResult = decrypt(encryptResult,password);
System.out.println(
"解密后:"
+
new
String(decryptResult));
}
}
上一篇:Druid数据库连接池使用
下一篇:DES加密算法—实现(C语言)
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by
DEVSOARTECH
豫ICP备11002312号-2
豫公网安备 41010502002439号