有关文件加密。。access操作的问题

近日在做有关access文件生成的功能。但是sun公司的ojdbc包自带的acceess操作方法不支持跨平台。于是找了第三方的 Access_JDBC30.jar 包。这个包可以跨平台使用。但是是要收费的。免费版本加载一次包只能有50次的链接。用到的insert语句一多就报错。于是改用文本文件加密方式导数据。加密代码如下

 

package com.copy.encrypt;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
public class FileEncryptAndDecrypt {
/**
* 文件file进行加密
* @param fileUrl 文件路径
* @param key 密码
* @throws Exception
*/
public static void encrypt(String fileUrl, String key) throws Exception {
File file = new File(fileUrl);
String path = file.getPath();
if (!file.exists()){
return ;
}
int index = path.lastIndexOf( "\\" );
String destFile = path.substring( 0 , index)+ "\\" + "abc" ;
File dest = new File(destFile);
InputStream in = new FileInputStream(fileUrl);
OutputStream out = new FileOutputStream(destFile);
byte [] buffer = new byte [ 1024 ];
int r;
byte [] buffer2= new byte [ 1024 ];
while (( r= in.read(buffer)) > 0 ) {
for ( int i= 0 ;i<r;i++)
{
byte b=buffer[i];
buffer2[i]=b== 255 ? 0 :++b;
}
out.write(buffer2, 0 , r);
out.flush();
}
in.close();
out.close();
file.delete();
dest.renameTo( new File(fileUrl));
appendMethodA(fileUrl, key);
System.out.println( "加密成功" );
}
/**
*
* @param fileName
* @param content 密钥
*/
public static void appendMethodA(String fileName, String content) {
try {
// 打开一个随机访问文件流,按读写方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw" );
// 文件长度,字节数
long fileLength = randomFile.length();
//将写文件指针移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 解密
* @param fileUrl 源文件
* @param tempUrl 临时文件
* @param ketLength 密码长度
* @return
* @throws Exception
*/
public static String decrypt(String fileUrl, String tempUrl, int keyLength) throws Exception{
File file = new File(fileUrl);
if (!file.exists()) {
return null ;
}
File dest = new File(tempUrl);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
InputStream is = new FileInputStream(fileUrl);
OutputStream out = new FileOutputStream(tempUrl);
byte [] buffer = new byte [ 1024 ];
byte [] buffer2= new byte [ 1024 ];
byte bMax=( byte ) 255 ;
long size = file.length() - keyLength;
int mod = ( int ) (size% 1024 );
int div = ( int ) (size>> 10 );
int count = mod== 0 ?div:(div+ 1 );
int k = 1 , r;
while ((k <= count && ( r = is.read(buffer)) > 0 )) {
if (mod != 0 && k==count) {
r = mod;
}
for ( int i = 0 ;i < r;i++)
{
byte b=buffer[i];
buffer2[i]=b== 0 ?bMax:--b;
}
out.write(buffer2, 0 , r);
k++;
}
out.close();
is.close();
return tempUrl;
}
/**
* 判断文件是否加密
* @param fileName
* @return
*/
public static String readFileLastByte(String fileName, int keyLength) {
File file = new File(fileName);
if (!file.exists()) return null ;
StringBuffer str = new StringBuffer();
try {
// 打开一个随机访问文件流,按读写方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "r" );
// 文件长度,字节数
long fileLength = randomFile.length();
//将写文件指针移到文件尾。
for ( int i = keyLength ; i>= 1 ; i--){
randomFile.seek(fileLength-i);
str.append(( char )randomFile.read());
}
randomFile.close();
return str.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null ;
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值