- 浏览: 31705 次
- 性别:
- 来自: 上海
文章分类
最新评论
简单的AES加密,废话不多说,直接代码
=============================
package cn.enc;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/**
*
* %Encrtry%。
* <p>%类的简介%。</p>
*
* @author arron.huang
* @version v1.0.0
* <p><B>last update </B> by arron.huang @ 2011-9-7</p>
* @since v1.0.0
*/
public class Encrtry {
/**
* 加密参数
*/
public final static int enc = Cipher.ENCRYPT_MODE;
/**
* 解密码参数
*/
public final static int dec = Cipher.DECRYPT_MODE;
public static void main(String[] args) throws Exception{
String message = "欢迎来到我的AES加密基地";
String fileName = "aaa.dat";
System.out.println("需要机密数据>>>>>>>>>" + message);
String enc_String = sign(message, fileName, enc);
System.out.println("加密后可以显示数据>>>>>"+enc_String+"<<<<<");
System.out.println("机密后长度>>>>>>>>>>>>>" + enc_String.length() + "<<<<<<<<<<<<<<<<");
String dec_String = sign(enc_String, fileName, dec);
System.out.println("解密后数据>>>>" + dec_String + "<<<<<<<<");
}
/**
*
* %加密message 返回加密后数据(注:句号不能删除,本注应删除)%。
* <p>%传入message 返回message机密后数据,使用AES加密方式,(简单方法可不必详述)%。</p>
* @param message 需要加密或者解密数据字符串
* @param encType
* @return String 根据不同encType 加密解密,返回可能是加密后数据,或者解密后数据
*/
public static String sign(String message, String file, int encType) {
String sign = "";
Key key = null;
if(null == message || "".equals(message)) {
return sign;
}
try {
FileInputStream inputStream = new FileInputStream("encrtry.k8");
ObjectInputStream ois = new ObjectInputStream(inputStream);
key = (Key) ois.readObject();
ois.close();
inputStream.close();
} catch (FileNotFoundException e) {
System.out.println("加密文件未找到");
} catch (IOException e) {
e.printStackTrace();
System.out.println("流读取出错");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("类转换错误,读取Key文件错误");
}
try {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(encType, key);
switch (encType) {
case Cipher.ENCRYPT_MODE:
byte [] bytes = cipher.doFinal(message.getBytes());
sign = outputStream(bytes, file);
break;
case Cipher.DECRYPT_MODE:
byte [] bys = inputStream(file);
sign = new String(cipher.doFinal(bys));
break;
default:
break;
}
} 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 sign;
}
/**
*
* %字节数据保存到临时文件中(注:句号不能删除,本注应删除)%。
* <p>%方法详述(简单方法可不必详述)%。</p>
* @param bytes 读取字符
* @param file 临时保存文件路径包括文件名
* @return
*/
private static String outputStream(byte [] bytes, String file) {
try {
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(bytes);
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return parseBytes2Hex(bytes);
}
private static byte [] inputStream(String file) {
byte [] sr = null;
try {
FileInputStream inputStream = new FileInputStream(file);
sr = new byte [inputStream.available()];
int totle = 0;
int len = inputStream.read(sr);
while(len > 0) {
totle += len;
len = inputStream.read(sr, totle, sr.length - totle);
}
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sr;
}
/**
*
* %产生唯一钥匙(注:句号不能删除,本注应删除)%。
* <p>%通过AES方式产生一把以后需要使用的钥匙,只需要调用一次(简单方法可不必详述)%。</p>
*
* @param String file 文件地址
*
*/
private static void encrtry(String fila) {
try {
Cipher cipher = Cipher.getInstance("AES");
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
FileOutputStream fileOutput = new FileOutputStream("encrtry.k8");
ObjectOutputStream obj = new ObjectOutputStream(fileOutput);
obj.writeObject(secretKey);
obj.close();
fileOutput.close();
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte [] bytes = cipher.doFinal("12324".getBytes());
System.out.println(new String(bytes));
cipher.init(Cipher.DECRYPT_MODE, secretKey);
System.out.println(new String(cipher.doFinal(bytes)));
} catch (Exception e) {
e.printStackTrace();
}
}
/**将16进制转换为二进制
* @param hexStr
* @return
*/
private static byte[] parseHex2Bytes(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;
}
/**
* 将二进制转换成16进制
* @param buf
* @return
*/
private static String parseBytes2Hex(byte bys[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bys.length; i++) {
String hex = Integer.toHexString(bys[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
}
====================测试输出结果=================
需要机密数据>>>>>>>>>欢迎来到我的AES加密基地
加密后可以显示数据>>>>>3C48399D64D3388D0348262ECC45AE27BFB010FF77712088FE05A92A7282477B<<<<<
加密后长度>>>>>>>>>>>>>64<<<<<<<<<<<<<<<<
解密后数据>>>>欢迎来到我的AES加密基地<<<<<<<<
发表评论
-
Java 网络 网络字节序 字节序
2012-09-16 21:24 727BIG-ENDIAN(大字节序、 ... -
java spring 框架 mvc 开发,action配置
2011-09-08 10:10 897<?xml version="1.0" ... -
Java JPA 操作数据,事物控制不完整 clear(),merge()方法分析
2011-08-19 12:19 3215最近在使用框架 spring+jpa+cxf 部署一个服务,出 ... -
Invocation of init method failed; nested exception is javax.xml.ws.WebServiceEx
2011-08-04 10:50 4208在webservice项目中,出 ... -
Missing classpath entry D:\jboss-4.0.5.GA \server\default\lib\mail.jar
2011-07-26 12:38 2299尝试新版本Eclipse3.7 indigo 加载jboss4 ... -
System.getProperty以获取的值
2011-07-12 12:03 1050System.out.println("java_v ... -
Xstream 对象与xml 互转
2011-06-29 17:55 1515需要 jar : xtream.jar ... -
jsp jstl标签使用
2011-06-29 16:27 1122JSTL使用表达式来简化页面的代码,这对一些标准的方法,例如b ... -
List 分组
2011-06-29 16:26 841private Map<String, Map<S ... -
Eclipse不自动编译 手动project》Clean
2011-06-29 16:23 2676打开project->build automatical ... -
Context initialization failed
2011-06-29 16:17 3782错误描述:Context initialization fai ... -
打包jar文件,但是java项目中引用了jar文件
2011-06-20 18:27 844插件地址,在线安装 http://kurucz-grafika ... -
java 按行读取文件内容
2011-06-20 10:40 1111String readPath = ""; ... -
使用Common-fileUpload 上传文件 读取文件内容
2011-05-05 23:17 1428private String fileTmpPath = &q ... -
简易读取配置在xml中的内容
2011-05-05 10:22 747一般我们会把经常修改的内容写在xml中利于我们修改,维护信息 ...
相关推荐
Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密
java aes加密代码,接口调用应用可以用到
AES加密的两种方式。一种String 一种byte。并且添加进制转换解决加密过程非法报错问题
java代码-java使用AES加密解密 AES-128-ECB加密 ——学习参考资料:仅用于个人学习使用
java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...
java实现aes加解密
本文就简单介绍如何通过JAVA实现AES加密: /** * 测试AES加密和解密 * @param args */ public static void main(String[] args) { /**数据初始化**/ String content = "http://www.mbaike.net"; String...
c/c++与java互通 AES加密解密; 只使用基本char,数组运算实现加密算法;不依赖其它加密lib
主要介绍了java使用Hex编码解码实现Aes加密解密功能,结合完整实例形式分析了Aes加密解密功能的定义与使用方法,需要的朋友可以参考下
AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
JAVA AES 加密算法 javax.crypto.Cipher AES/ECB/PKCS5Padding
Delphi实现AES加密和解密, 同Java加解密兼容
AES算法的实现过程,实现了AES的加密和解密过程
Java实现AES加密算法Java实现AES加密算法
1.采用秘钥为16位长度的加密字符 2.加密算法为AES/ECB/PKCS5Padding 3.解决加解密乱码问题 4.完整的线上可运行代码及各方法及步骤注释 5.无任何插件,java环境直接运行
* 编码工具类 * 1.将byte[]转为各种进制的字符串 * 2.base 64 encode * 3.base 64 decode * 4.... * 5.... * 6.... * 7.AES加密 * 8.AES加密为base 64 code * 9.AES解密 * 10.将base 64 code AES解密
java 基于AES实现对文件的加密 解密 有问题 www.willvc.com.cn 能联系到我
采用固定AES密钥加密,AES使用PKCS5规则进行补位,加密模式使用AES-ECB
java aes128/256 对称加密解密,rsa对称加密解密验签实现,php java通用aes加密 支持任何形式的aes加密,文件,字符,字节等,内含php代码,可以与php平台实现aes加密,而且包含rsa非对称加密签名验签实现,都是对...
Java AES加密解密,可以修改key值和偏移量