import com.mchange.v2.io.DirectoryDescentUtils;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.Key;
import java.security.SecureRandom; /**
* Created by John on 2015/3/24.
*/
public class DESUtil { public static String keyPath;
public static void saveDesKey() {
try {
SecureRandom sr = new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance("DES");
kg.init(sr);
FileOutputStream fos = new FileOutputStream(keyPath);
ObjectOutputStream oos = new ObjectOutputStream(fos); //generate key
Key key = kg.generateKey();
oos.writeObject(key);
oos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
} public static Key getKey() {
Key kp = null; try {
// String fileName = "D:/deskey.xml";
/** InputStream is = DESTest.class.getClassLoader()
.getResourceAsStream(fileName);
**/
Path path = Paths.get(keyPath);
InputStream is = Files.newInputStream(path);
ObjectInputStream oos = new ObjectInputStream(is); kp = (Key) oos.readObject();
oos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return kp;
} /**
* 文件file进行加密并保存目标文件destFile中 * @param file
* 要加密的文件 如c:/test/srcFile.txt * @param destFile
* 加密后存放的文件名 如c:/加密后文件.txt
*/
public static void encrypt(String file, String destFile) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, getKey());
InputStream is = new FileInputStream(file);
OutputStream out = new FileOutputStream(destFile);
CipherInputStream cis = new CipherInputStream(is, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = cis.read(buffer)) > 0) {
out.write(buffer, 0, r);
}
cis.close();
is.close();
out.close();
} /**
* 文件file进行加密并保存目标文件destFile中 * @param file
* 已加密的文件 如c:/加密后文件.txt
*
* @param dest 解密后存放的文件名 如c:/ test/解密后文件.txt
*/
public static void decrypt(String file, String dest) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, getKey());
InputStream is = new FileInputStream(file);
OutputStream out = new FileOutputStream(dest);
CipherOutputStream cos = new CipherOutputStream(out, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = is.read(buffer)) >= 0) {
cos.write(buffer, 0, r);
}
cos.close();
out.close();
is.close();
} public static void main(String[] args) throws Exception { //密钥保存在c:\\gpi.key文件中
keyPath = "c:\\gpi.key";
saveDesKey(); //加密c:\src.xml文件
encrypt("C:\\src.xml", "c:\\encrypted.xml"); //解密c:\encrypted.xml文件
decrypt("c:\\encrypted.xml", "c:\\decrypted.xml");
}
}

Java DES 加解密文件的更多相关文章

  1. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  2. java DES加解密及Wrong key size错误

    如下的DES加密方法会报错:Wrong key size public static String encryptDES(String source) throws Exception{ Secret ...

  3. Java DES 加解密("DES/CBC/PKCS5Padding")

    /** * DES加密 * * @param data 加密数据 * @param key 密钥 * @return 返回加密后的数据 */ public static byte[] desEncry ...

  4. Java DES 加解密("DES/ECB/PKCS1Padding")

    private static final Cipher DES_CIPHER; static { try { DES_CIPHER = Cipher.getInstance("DES/ECB ...

  5. Java DES 加解密("DES/EBC/NoPadding")

    private static final Cipher DES_CIPHER; static { try { DES_CIPHER = Cipher.getInstance("DES/ECB ...

  6. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  7. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  8. C# Java DES加密解密

    转自http://www.cnblogs.com/zhuiyi/archive/2013/04/01/2993201.html 最近被DES加解密弄得超级郁闷,我用C#的方法加密得到的密文老是跟客户给 ...

  9. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

随机推荐

  1. mysql 聚集函数需要注意的问题

    1.当没有记录的时候,使用聚集函数,会导致出现一条记录,记录的取值都是NULL,如下:mysql> select name from student where name='David';Emp ...

  2. (四)linux常用命令

    1.在vim下要查找特定的字符串可按Esc键,然后按/字符串,如/DFGE 2.在vim下要显示行数:set nu

  3. iOS开发之.pch文件初识

    pch全称是“precompiled header”,即预编译头文件,自Xcode6诞生之日起,便在Supporting Files文件下消失多年.说起苹果对pch的爱恨情仇,其分析pch的作用便不言 ...

  4. 选择排序算法Java与Python实现

    Java 实现 package common; public class SimpleArithmetic { /** * 选择排序 * 输入整形数组:a[n] [4.5.3.7] * 1. 取数组编 ...

  5. hiho_1052_基因工程

    题目大意 给出一个字符串(长度<=1000),字符串中的字符均为ATCG中的某一个.给出一个数字K,通过更改字符串中的某些字符,可以使得字符串的前K个字符形成的子串和最后K个字符形成的子串相同, ...

  6. Unity 5 中的全局光照技术详解(建议收藏)

    本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING (文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法, ...

  7. Unity5.1 新的网络引擎UNET(十五) Networking 引用--上

    http://blog.csdn.net/u010019717/article/details/46993697 孙广东  2015.7.21 本节提供了与网络系统一起使用的组件的详细信息. 1.Ne ...

  8. 关于OneProxy推广

    通过以下关键字 分库分表,读写分离,连接池,跨库查询,开源数据库,MySQL,高性能,并行查询 在搜索引擎中,都找不到OneProxy和OneSQL的影子

  9. 【BZOJ 2818】Gcd - 筛法求素数&phi()

    题目描述 给定整数,求且为素数的数对有多少对. 分析 首先筛出所有的素数. 我们考虑枚举素数p,统计满足的个数,等价于统计的个数,即统计以内满足互质的有序数对个数. 不难发现,也就是说,我们只要预处理 ...

  10. echarts饼图--数据交互

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...