* 主要是怕手快不小心运行了这个类里面的入口
* (我真实的程序入口在另外一个地方,那里在之前会做一些安全检查操作)~
* 我发现我真有点儿怂了,上次乱搞磁盘被格了200多个G,
* 前几天搞个整站下载器,不小心删掉了我csdn博客40篇博文,
* 在我的辛勤恢复之下,还是丢了几篇文章(CSDN每日限制发布20篇博文)~
* 后面想了下,我当时的session没有关闭,整站下载器跑起来以后对我博客里面的各种连接那是一顿乱点啊,
* 置顶,删除什么的操作,整站下载器那是毫不犹豫地一往无前,结果我便悲催了...一把辛酸泪~
* 扯远了,拉回。。
* 修改 MODE 设置当前是加密还是解密
* 修改 RAW_FILES_DIR, DECRYPTED_DIR,ENCRYPTED_DIR 这几个目录确定相关文件所在的路径~
* 密码可以随便修改(小于我所规定的 32 个 ascii 字符即可,
* 实际上只有前8个字符会参与到 des 加解密,不过我有做简单的处理,还是设了一层屏障)~
* 还有,代码里面用到了一些我自定义的工具类:
* 1。BYSingle 仅仅是对加解密文件所处的路径做设置
* 2。BY 也只是让打印写起来更简短一点,如
* BY.log() == System.out.println()
* 事实上我还是觉得 sysout 写起来比较有感觉~
* 3。FileListsUtil 是一个遍历文件夹下子文件以获取所有子单文件路径的辅助类
* 4。FileNameFilter 是一个筛选或保留特定格式文件路径的辅助类
* 。。。。。
* 上次不经意间看到一个份对文件进行 3 重 DES 加密的代码,
* 效果比较蛋疼,密码是随机生成的 48 个 16 进制数
* 加密的时候48哥16进制数被分成 3 组,每组 16 个 16 进制数,8 个字符
* 文件 -> 0~15_0x数.DES加密 -> 16~31_0x数.DES加密 -> 32~47_0x数.DES加密 -> 文件
* 蛋疼,一个 6.6MB 的 PSD 文件我等了好一会儿(我IntelE6600CPU,3.06G主频,8G内存),我想说:
* 安全是算得上相当安全了,但是这个效率实在是伤不起啊~
* 其实我觉得我个人更倾向于比较投机的文件加密方式,如:
* 对文件头,文件尾的几个字节做做取反操作等..
* 那样毕竟要高效一点儿嘛,也能拦住不少小白了,那便是我的需求~
* last,很简单的一个加密实现,周末愉快~
*
* @param args
*/
public static void main(String[] args) {
/** 1。设置密码以及加解密文件存放的中转目录~ */
EncryptZipper.PWD = "Less than 32 characters";
EncryptZipper.ENCRYPTED_DIR = "/Users/user/MyData/MyPersonal/encrypted";
EncryptZipper.DECRYPTED_DIR = "/Users/user/MyData/MyPersonal/decrypted";
/** 2。1。加密配置~ */
// EncryptZipper.MODE = Mode.encrypt;
// EncryptZipper.RAW_FILES_DIR = "/Users/user/Desktop/test";
/** 2。2。解密配置~ */
EncryptZipper.RAW_FILES_DIR = "/Users/user/MyData/MyPersonal/encrypted";
/** 3。新建对象,执行操作(依据上面所做的配置对相关目录下的所有或者特定文件做处理)~ */
EncryptZipper ez = new EncryptZipper();
ez.handle(RAW_FILES_DIR);
}
@Override
public boolean handle(String sourcePath) {
// 1。准备工作,建立几个主要目录(如果他们不存在)~
if(!prepare()) {
return false;
}
// 2。收集需要进行处理的文件列表~
List
if(new File(sourcePath).isDirectory()) {
FileLists.listFilesOnly(sourcePath, pathList);
} else {
pathList.add(sourcePath);
}
if(MODE == Mode.decrypt) {
FileNameFilter.reserve(pathList, SUFFIXS);
}
// 3。实际处理~
for(String path : pathList) {
File child = new File(path);
/** 是否打印出处理文件的路径~ */
if(BYSingle.LOG_HANDLED_FILE_NAME_OR_NOT) {
BY.log(child.getName());
}
try {
boolean success = false;
if(MODE == Mode.encrypt) {
success = encryptFile(child);
} else {
success = decryptFile(child);
}
if(!success) {
System.err.println("在加密(解密) " + child.getAbsolutePath() + " 的时候出现问题!");