【第22期】观点:IT 行业加班,到底有没有价值?

java DES加密解密文件

原创 2013年12月05日 17:36:42

本文转自:http://blog.csdn.net/springsky_/article/details/7873909

在android开发中或者java开发中,经常用一些加密或者解密文件的,下面是我最近测试的一个DES加密解密文件的方式,记录一下,防止以后忘记了!

下面直接贴代码把,详细的注释都写有:

package com.spring.des;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

/***
 * Des文件加密解密
 * 
 * @author spring sky<br>
 * Email:vipa1888@163.com<br>
 * QQ:840950105
 * 
 */
public class DesFileEncrypt {
	/**
	 * 要加密的文件路径列表
	 */
	public static String[] filePath = { "D:/sasdfp.sql" };
	/**
	 * 加密后的文件路径列表
	 */
	public static String[] outFilePath = new String[filePath.length];
	private static final String KEY = "spring sky";

	public DesFileEncrypt() {
		super();
		getKey(KEY);
		initCipher();
		//初始化开始加密文件
		crateEncryptFile();
	}

	private Key key;
	
	/***
	 * 解密密码
	 */
	private Cipher cipherDecrypt;
	/**
	 * 加密密码
	 */
	private Cipher cipherEncrypt;

	/**
	 * 加密文件平且记录加密后的文件路径
	 * */
	private void crateEncryptFile() {
		String outPath = null;
		for (int i = 0; i < filePath.length; i++) {
			try {
				outPath = filePath[i].substring(0,filePath[i].lastIndexOf("."))+".bin";
				encrypt(filePath[i], outPath);
				outFilePath[i] = outPath;
				System.out.println(filePath[i]+"加密完成,加密后的文件是:"+outFilePath[i]);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		System.out.println("=========================加密完成=======================");
		
	}

	/**
	 * 加密文件的核心
	 * 
	 * @param file
	 *            要加密的文件
	 * @param destFile
	 *            加密后存放的文件名
	 */
	public void encrypt(String file, String destFile) throws Exception {
		InputStream is = new FileInputStream(file);
		OutputStream out = new FileOutputStream(destFile);

		CipherInputStream cis = new CipherInputStream(is, cipherEncrypt);
		byte[] buffer = new byte[1024];
		int r;
		while ((r = cis.read(buffer)) > 0) {
			out.write(buffer, 0, r);
		}
		cis.close();
		is.close();
		out.close();
	}

	/***
	 * 解密文件
	 * @param destFile
	 */
	public void decrypt(String destFile) {
		try {
			InputStream is = new FileInputStream(destFile);
			CipherInputStream cis = new CipherInputStream(is, cipherDecrypt);
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					cis));
			String line = null;
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
			}
			reader.close();
			cis.close();
			is.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void initCipher() {
		try {
			// 加密的cipher
			cipherEncrypt = Cipher.getInstance("DES");
			cipherEncrypt.init(Cipher.ENCRYPT_MODE, this.key);
			// 解密的cipher
			cipherDecrypt = Cipher.getInstance("DES");
			cipherDecrypt.init(Cipher.DECRYPT_MODE, this.key);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 自定义一个key
	 * 
	 * @param string
	 */
	public Key getKey(String keyRule) {
		// Key key = null;
		byte[] keyByte = keyRule.getBytes();
		// 创建一个空的八位数组,默认情况下为0
		byte[] byteTemp = new byte[8];
		// 将用户指定的规则转换成八位数组
		for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {
			byteTemp[i] = keyByte[i];
		}
		key = new SecretKeySpec(byteTemp, "DES");
		return key;
	}

	/**
	 * 解密密码
	 * 
	 * @return
	 */
	public Cipher getCipherEdcrypt() {
		return cipherDecrypt;
	}

	/**
	 * 加密密码
	 * 
	 * @return
	 */
	public Cipher getCipherEncrypt() {
		return cipherEncrypt;
	}

	/***
	 * 测试加密解密
	 * @param args
	 */
	public static void main(String[] args) {
		DesFileEncrypt desFileEncrypt = new DesFileEncrypt();
		desFileEncrypt.decrypt(outFilePath[0]);  //解密第一个文件平且测试解密后的结果
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java DES、AES、RSA、DM5读取文件加密解密

//下面代码是直接读取文件来进行加密解密,算法文件 package Test; import javax.crypto.KeyGenerator; import javax.crypto.Ci...

Java加密解密快速入门上篇【包括MD5、BASE64、DES、RSA等算法】

        搞Java的攻城狮应该比较欣喜若狂的,不仅Sun公司的JDK提供了庞大的类库,而且还有众多的开源组织和个人不断地丰富着Java的生态系统。没错的,诸如MD5、BASE64、DES、RSA等经典加密解密算法,JDK都有提供专门的API来封装相关操作。程序猿只需要了解算法的思想,以及学习如何使用API即可。<img title="吻" src="http://www.iteye.com/javascripts/tinymce/plugins/em

JAVA DES 对配置文件加密解密

简单的JAVA DES 对配置文件进行加密解密

在Java中使用DES加密解密算法[转]

import javax.crypto.*;import javax.crypto.spec.DESKeySpec;import java.security.NoSuchAlgorithmException;import java.security.InvalidKeyException;import java.security.SecureRandom;import java.security.spec.InvalidKey

Java DES文件加密解密

其中BASE64底层依赖库没有使用SUN的,而是下载的“javabase64-1.3.1.jar” DESUtils.java package demo.security; impo...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)