JAVA文件加密解密

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;
		 }
	 
	
}

 

转载于:https://www.cnblogs.com/FCWORLD/archive/2012/10/11/2720306.html

文件加密解密算法(Java源码) java,file,算法,加密解密,java源码 package com.crypto.encrypt; import java.security.SecureRandom; import java.io.*; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.Cipher; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.NoSuchPaddingException; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import java.lang.reflect.Constructor; import java.security.spec.KeySpec; import java.lang.reflect.InvocationTargetException; public class EncryptData { private String keyfile=null; public EncryptData() { } public EncryptData(String keyfile) { this.keyfile=keyfile; } /** * 加密文件 * @param filename String 源路径 * @param filenamekey String 加密后的路径 */ public void createEncryptData(String filename,String filenamekey) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException { //验证keyfile if(keyfile==null || keyfile.equals("")) { throw new NullPointerException("无效的key文件路径"); } encryptData(filename,filenamekey); } /** * 加密类文件 * @param filename String 原始的类文件 * @param encryptfile String 加密后的类文件 * @throws IOException * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws IllegalStateException */ private void encryptData(String filename,String encryptfile) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, IllegalStateException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException { byte data[]=Util.readFile(filename); // 执行加密操作 byte encryptedClassData[] = getencryptData(data); // 保存加密后的文件,覆盖原有的类文件。 Util.writeFile(encryptedClassData,encryptfile); } /** * 直接获得加密数据 * @param bytes byte[] * @throws IllegalStateException * @throws IllegalBlockSizeException * @throws BadPaddingException * @throws InvalidKeyException * @throws NoSuchPaddingException * @throws InvalidKeySpecException * @throws NoSuchAlgorithmException * @throws InstantiationException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException * @throws NoSuchMethodException * @throws SecurityException * @throws ClassNotFoundException * @throws IOException * @return byte[] */ public byte[] createEncryptData(byte[] bytes) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IOException { bytes=getencryptData(bytes); return bytes; } private byte[] getencryptData(byte[] bytes) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, IllegalStateException { // 产生一个可信任的随机数源 SecureRandom sr = new SecureRandom(); //从密钥文件key Filename中得到密钥数据 byte[] rawKeyData = Util.readFile(keyfile); // 从原始密钥数据创建DESKeySpec对象 Class classkeyspec=Class.forName(Util.getValue("keyspec")); Constructor constructor = classkeyspec.getConstructor(new Class[]{byte[].class}); KeySpec dks = (KeySpec) constructor.newInstance(new Object[]{rawKeyData}); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm()); SecretKey key = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(Util.getAlgorithm()); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 执行加密操作 bytes = cipher.doFinal(bytes); // 返回字节数组 return bytes; } /** * 设置key文件路径 * @param keyfile String */ public void setKeyFile(String keyfile) { this.keyfile=keyfile; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值