当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
Java文件加解密
发布时间:2010/10/26 10:27:21 来源:城市学习网 编辑:ziteng
  做网站有时会处理一些上传下载的文件。可能会用到加解密功能。以下是一个加解密方法。
  Java代码
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import net.ezcom.common.conf.Conf;
  import net.ezcom.common.time.TimeHandler;
  /**
  * 加解密单元
  * @author lupingui
  * 2009-01-12 17:55:47
  */
  public class EncryptDecrypt {
  //加解密KEY,这个不能变动,这里可以由任意的字符组成,尽量用特殊字符
  static final byte[] KEYVALUE = "".getBytes();
  //读取字节的长度
  static final int BUFFERLEN = 512;
  //加密临时存储目录
  static final String TRANSIT_DIR_ENC = "";
  //解密临时存储目录
  static final String TRANSIT_DIR_DEC = "";
  /**
  * 文件加密
  * @param oldFile:待加密文件
  * @param saveFileName:加密后文件保存路径
  * @return
  * @throws IOException
  */
  public static boolean encryptFile(File oldFile, String saveFileName) throws IOException{
  //如果传入的文件不存在或者不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile()){
  return false;
  }
  FileInputStream in = new FileInputStream(oldFile);
  //加密后存储的文件
  File file = new File(saveFileName);
  if (!file.exists()){
  return false;
  }
  //读取待加密文件加密后写入加密存储文件中
  FileOutputStream out = new FileOutputStream(file);
  int c, pos, keylen;
  pos = 0;
  keylen = KEYVALUE.length;
  byte buffer[] = new byte[BUFFERLEN];
  while ((c = in.read(buffer)) != -1) {
  for (int i = 0; i < c; i++) {
  buffer[i] ^= KEYVALUE[pos];
  out.write(buffer[i]);
  pos++;
  if (pos == keylen){
  pos = 0;
  }
  }
  }
  in.close();
  out.close();
  return true;
  }
  /**
  * 文件加密
  * @param oldFile:待加密文件
  * @param saveFile:加密后的文件
  * @return
  * @throws IOException
  */
  public static boolean encryptFile(File oldFile, File saveFile) throws IOException{
  //如果传入的文件不存在或者不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile() || !saveFile.exists() || !saveFile.isFile()){
  return false;
  }
  FileInputStream in = new FileInputStream(oldFile);
  //读取待加密文件加密后写入加密存储文件中
  FileOutputStream out = new FileOutputStream(saveFile);
  int c, pos, keylen;
  pos = 0;
  keylen = KEYVALUE.length;
  byte buffer[] = new byte[BUFFERLEN];
  while ((c = in.read(buffer)) != -1) {
  for (int i = 0; i < c; i++) {
  buffer[i] ^= KEYVALUE[pos];
  out.write(buffer[i]);
  pos++;
  if (pos == keylen){
  pos = 0;
  }
  }
  }
  in.close();
  out.close();
  return true;
  }
  /**
  * 文件加密
  * @param oldFile:待加密文件
  * @return
  * @throws IOException
  */
  public static File encryptFile(File oldFile) throws IOException{
  //如果传入的文件不存在或者不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile()){
  return null;
  }
  FileInputStream in = new FileInputStream(oldFile);
  //临时加密文件存储目录
  File dirFile = new File(TRANSIT_DIR_ENC);
  //如果临时存储目录不存在或不是目录则直接返回
  if (!dirFile.exists() || !dirFile.isDirectory()){
  return null;
  }
  //加密后存储的文件
  File file = new File(dirFile,"enc_" + TimeHandler.getInstance().getTimeInMillis() + "_" + oldFile.getName());
  if (!file.exists()){
  file.createNewFile();
  }[NextPage]   //读取待加密文件加密后写入加密存储文件中
  FileOutputStream out = new FileOutputStream(file);
  int c, pos, keylen;
  pos = 0;
  keylen = KEYVALUE.length;
  byte buffer[] = new byte[BUFFERLEN];
  while ((c = in.read(buffer)) != -1) {
  for (int i = 0; i < c; i++) {
  buffer[i] ^= KEYVALUE[pos];
  out.write(buffer[i]);
  pos++;
  if (pos == keylen){
  pos = 0;
  }
  }
  }
  in.close();
  out.close();
  //返回加密后的文件
  return file;
  }
  /**
  * 文件加密
  * @param oldFileName:待加密文件路径
  * @return
  * @throws IOException
  * @throws Exception
  */
  public static File encryptFile(String oldFileName) throws IOException {
  //如果待加密文件路径不正确则直接返回
  if (oldFileName == null || oldFileName.trim().equals("")){
  return null;
  }
  //待加密文件
  File oldFile = new File(oldFileName);
  //如果传入的文件不存在或者不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile()){
  return null;
  }
  //调用文件加密方法并返回结果
  return encryptFile(oldFile);
  }
  /**
  * 文件解密
  * @param oldFile:待解密文件
  * @return
  * @throws IOException
  */
  public static File decryptFile(File oldFile) throws IOException{
  //如果待解密文件不存在或者不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile()){
  return null;
  }
  FileInputStream in = new FileInputStream(oldFile);
  //临时解密文件存储目录
  File dirFile = new File(TRANSIT_DIR_DEC);
  //如果临时解密文件存储目录不存在或不是目录则返回
  if (!dirFile.exists() || !dirFile.isDirectory()){
  return null;
  }
  //解密存储文件
  File file = new File(dirFile,"dec_" + TimeHandler.getInstance().getTimeInMillis() + "_" + oldFile.getName().substring(oldFile.getName().lastIndexOf(".")));
  if (!file.exists()){
  file.createNewFile();
  }
  //读取待解密文件并进行解密存储
  FileOutputStream out = new FileOutputStream(file);
  int c, pos, keylen;
  pos = 0;
  keylen = KEYVALUE.length;
  byte buffer[] = new byte[BUFFERLEN];
  while ((c = in.read(buffer)) != -1) {
  for (int i = 0; i < c; i++) {
  buffer[i] ^= KEYVALUE[pos];
  out.write(buffer[i]);
  pos++;
  if (pos == keylen){
  pos = 0;
  }
  }
  }
  in.close();
  out.close();
  //返回解密结果文件
  return file;
  }
  /**
  * 文件解密
  * @param oldFileName:待解密文件路径
  * @return
  * @throws Exception
  */
  public static File decryptFile(String oldFileName) throws Exception {
  //如果待解密文件路径不正确则直接返回
  if (oldFileName == null || oldFileName.trim().equals("")){
  return null;
  }
  //待解密文件
  File oldFile = new File(oldFileName);
  //如果待解密文件不存在或不是文件则直接返回
  if (!oldFile.exists() || !oldFile.isFile()){
  return null;
  }
  //调用文件解密方法并返回结果
  return decryptFile(oldFile);
  }
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved