package com.tristan.aes;
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;
/**
* @author 【轰隆隆】
*
*/
public class AES {
/**
* AES加密算法
*/
public AES() {
}
/**
* 加密
*
* @param content
* 需要加密的内容
* @param keyWord
* 加密密钥
* @return byte[] 加密后的字节数组
*/
public static byte[] encrypt(String content, String keyWord) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyWord.getBytes());
kgen.init(128, secureRandom);
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 String 加密后的字符串
*/
public static String encrypttoStr(String content, String password) {
return parseByte2HexStr(encrypt(content, password));
}
/**
* 解密
*
* @param content
* 待解密内容
* @param keyWord
* 解密密钥
* @return byte[]
*/
public static byte[] decrypt(byte[] content, String keyWord) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyWord.getBytes());
kgen.init(128, secureRandom);
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;
}
/**
* @param content
* 待解密内容(字符串)
* @param keyWord
* 解密密钥
* @return byte[]
*/
public static byte[] decrypt(String content, String keyWord) {
return decrypt(parseHexStr2Byte(content), keyWord);
}
/**
* 将二进制转换成16进制
*
* @param buf
* @return String
*/
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 byte[]
*/
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;
}
public static void main(String[] args) {
String content = "HongLongLong";
String Key = "http://www.honglonglong.com";
// 加密
System.out.println("加密前:" + content);
String encryptResult = encrypttoStr(content, Key);
System.out.println("加密后:" + encryptResult);
// 解密
byte[] decryptResult = decrypt(encryptResult, Key);
System.out.println("解密后:" + new String(decryptResult));
}
}
分享到:
相关推荐
AES算法Java实现 有简单界面 使用彭长根老师的现代密码学趣味之旅
湖北工业大学应用密码学期末课程设计,我做的是AES算法java实现对文档的保护。做的一个应用。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
AES 网络完全 加密算法 java 内含128b的AES 和256B的AES 实现程序
aes html 加解密插件与js工具 AES算法实现Java和JS互通加解密AES算法实现Java和JS互通加解密
用JAVA实现的AES算法,可对文件,字符串,byte数组加密,详细显示每一步加密过程
带界面的AES算法Java实现.pdf
带界面的AES算法Java实现.docx
带界面的AES算法Java实现.doc
Java实现AES加密算法Java实现AES加密算法
AES加密算法的JAVA实现(只有加密)
AES算法的实现过程,实现了AES的加密和解密过程
java实现复杂的AES算法 源码 java实现复杂的AES算法 源码 有问题 www.willvc.com.cn 能联系到我
JAVA版AES算法源码 JAVA版AES算法源码 JAVA版AES算法源码 JAVA版AES算法源码
密码学里德AES算法(JAVA版本),用JAVA来写,加密的速度不够理想,但是原理在那就行了。
Aes算法设计java实现.txt
本文就简单介绍如何通过JAVA实现AES加密: /** * 测试AES加密和解密 * @param args */ public static void main(String[] args) { /**数据初始化**/ String content = "http://www.mbaike.net"; String...
常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结
AES算法加密解密,只实现了单行密文加密,注释还蛮清楚的,Java实现,包含界面,简单的Java SE应用。
AES加密解密算法的Java实现.doc