- 浏览: 32680 次
- 性别:
- 来自: 上海
文章分类
最新评论
简单的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 781BIG-ENDIAN(大字节序、 ... -
java spring 框架 mvc 开发,action配置
2011-09-08 10:10 955<?xml version="1.0" ... -
Java JPA 操作数据,事物控制不完整 clear(),merge()方法分析
2011-08-19 12:19 3283最近在使用框架 spring+jpa+cxf 部署一个服务,出 ... -
Invocation of init method failed; nested exception is javax.xml.ws.WebServiceEx
2011-08-04 10:50 4310在webservice项目中,出 ... -
Missing classpath entry D:\jboss-4.0.5.GA \server\default\lib\mail.jar
2011-07-26 12:38 2362尝试新版本Eclipse3.7 indigo 加载jboss4 ... -
System.getProperty以获取的值
2011-07-12 12:03 1079System.out.println("java_v ... -
Xstream 对象与xml 互转
2011-06-29 17:55 1568需要 jar : xtream.jar ... -
jsp jstl标签使用
2011-06-29 16:27 1176JSTL使用表达式来简化页面的代码,这对一些标准的方法,例如b ... -
List 分组
2011-06-29 16:26 875private Map<String, Map<S ... -
Eclipse不自动编译 手动project》Clean
2011-06-29 16:23 2710打开project->build automatical ... -
Context initialization failed
2011-06-29 16:17 3893错误描述:Context initialization fai ... -
打包jar文件,但是java项目中引用了jar文件
2011-06-20 18:27 873插件地址,在线安装 http://kurucz-grafika ... -
java 按行读取文件内容
2011-06-20 10:40 1139String readPath = ""; ... -
使用Common-fileUpload 上传文件 读取文件内容
2011-05-05 23:17 1456private String fileTmpPath = &q ... -
简易读取配置在xml中的内容
2011-05-05 10:22 773一般我们会把经常修改的内容写在xml中利于我们修改,维护信息 ...
相关推荐
在提供的两个文件`AES加密1.java`和`AES加密2.java`中,可能包含了上述两种方式的实现。它们可能涵盖了密钥生成、初始化向量(IV)的使用、不同加密模式的选择以及如何处理加密过程中可能遇到的异常。通过阅读和理解...
Java平台提供了丰富的库支持AES加密,使得开发人员可以方便地在Java应用程序中集成这种强大的加密技术。 在Java中实现AES加密,主要涉及到以下几个关键步骤和知识点: 1. 密钥生成:AES加密需要一个密钥来执行加...
java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...
java代码-java使用AES加密解密 AES-128-ECB加密 ——学习参考资料:仅用于个人学习使用
Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密
总的来说,理解并正确使用Java实现AES加密和解密,需要注意秘钥的生成、工作模式的选择、填充方式以及字符编码的一致性,这样才能确保数据的安全传输和正确解密。通过实际操作和实践,你可以更深入地掌握这些知识点...
Java中的AES加密同样有多种工作模式可供选择,并且JCE也提供了易于使用的API来实现这些操作。为了实现Delphi和Java之间的兼容性,开发者需要确保两者的加密参数(如密钥、初始向量IV、工作模式等)一致,并且遵循...
java实现aes加解密
这个压缩包文件可能包含了Java实现AES加密和解密的代码示例,适合初学者了解和学习AES加密的基本使用。由于描述中提到"有些许不足,谨慎下载",可能意味着示例代码可能存在一些问题或者不完善的地方,需要用户自行...
在Java中实现AES(Advanced Encryption Standard)...总之,Java中的AES加密和解密涉及到密钥生成、密码器的使用以及数据的转换。在实现过程中,还需要考虑安全性、性能和兼容性等问题,确保加密算法的有效性和安全性。
Java中,虽然提供了BigInteger类来处理大整数,但AES加密解密通常使用Java的javax.crypto包,其中的Cipher类可以直接处理。然而,为了实现不依赖外部库的目标,我们需要手动实现AES的全部算法,这意味着需要将Cipher...
例如,Java的`javax.crypto.Cipher`类和.NET的`System.Security.Cryptography.Aes`类提供了AES加密的功能。Java的`Cipher`类默认使用PKCS5Padding填充模式,而.NET的`Aes`类默认使用PKCS7Padding(两者在填充方式上...
总结来说,这个Java示例展示了如何使用Hex编码和解码配合AES加密算法进行数据安全保护。在实际应用中,为了提高安全性,通常会采用更复杂的加密模式(如CBC或CFB),并使用随机生成的密钥,而不是固定或硬编码的密钥...
AES加密过程** - **字节代换**:这是非线性的一步,每个字节通过一个固定的查找表进行替换,使得明文数据的初始模式发生改变。 - **行移位**:将128位的矩阵按行进行循环左移,不同轮的移动位数不同,增加了混淆...
本教程将详细讲解如何在Java中使用AES加密和解密文件,以确保数据的安全性。 AES全称为Advanced Encryption Standard,是一种对称加密算法,它在信息安全领域中被广泛应用,因为其速度快、效率高且安全性强。Java...
AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
这是因为 Java 中的 AES 加密算法需要使用 MD5 加密后的密钥。 Node.js 和 Java 之间的 AES 加密结果保持一致 为了使 Node.js 和 Java 之间的 AES 加密结果保持一致,需要确保使用相同的加密算法和密钥。在 Node....
在Java中实现AES128加密解密,通常会使用Java Cryptography Extension (JCE) 提供的API。AES支持三种工作模式:ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和CFB(Cipher Feedback)。其中,ECB是最...
总结来说,理解和正确使用Java中的AES和DES加密算法,需要考虑密钥管理、初始化向量、填充模式、编码以及错误处理等多个方面,同时要关注加密过程中的安全风险和潜在陷阱。在实践中,结合合适的加密库和最佳实践,...
在提供的"demo"文件中,可能包含了具体的项目结构、配置文件、源代码等,这些内容可以帮助进一步理解和实现这个Java前后端通讯AES加密及解密的案例。实际操作时,需要根据文件内容进行相应的集成和调试。