Java防止文件被篡改之文件校验功能的实例代码防止文件被篡改之文件校验功能的实例代码
主要介绍了Java防止文件被篡改之文件校验功能,本文给大家分享了文件校验和原理及具体实现思路,需要的朋
友可以参考下
1.为什么要防止文件被篡改?为什么要防止文件被篡改?
答案是显然的,为了保证版权,系统安全性等。之前公司开发一个系统,技术核心是一个科学院院士的研究成果,作为一款
商业软件来说,保证公司及作者版权是非常重要的。系统安全性就更不用说了,系统两三下就被搞垮了,那这个系统就不算是
一个合格的系统。
2.文件校验和作用文件校验和作用
我们都知道,一个系统或者软件都是由众多文件组成的。文件校验和的作用就是保证系统版本的正确性和唯一性。具体
原理下面会详细解释。
3.文件校验和的原理文件校验和的原理
思路和实现的方式可能多种多样,我说的是自己的思路和实现方式,请读者自己斟酌使用。
原理:主要有两个核心:
1.每个不同的文件的md5值是不同的
2.每个文件被修改后的md5会发生改变
4.实现思路实现思路
1. 拿到系统的根目录
2. 采用递归,遍历目录文件
3. 计算每个文件的md5值 , 并相加。 原因:每个文件md5值不同,相加后的md5值也必定是唯一。 一个md5值占32
位,4个字节。大家都知道,1GB = 1024MB ; 1MB = 1024KB; 1KB=1024B ; 1B = 8bit ; 也就是说就算系统有10000个文
件,10000*4B/1024 = 39KB 。这个值是远远小于String的最大值的。String 最大值位2GB左右,本人未亲自测试过,数据从
网上得来。
4.所有文件的md5值相加后,得到一个总的md5值,并且是唯一的。
5.用户客户端启动时,会先校验文件和,若和服务器中的校验和不一致,则判定客户端非法,禁止其一切行为!
注意:有些文件是一值在改变的,如log日志。故这些一直在变的文件,不应该参与文件校验和计算
5.代码实现代码实现
校验文件
public class CheckSystemFolderSum {
// 所有文件md5总和
private static String fileSum = "";
/**
* 遍历文件夹下的所有文件(递归) 并对每个文件计算md5值 得到所有文件的md5值之和
* @param file 软件系统的根文件夹 , suffix 目录文件后缀(以该后缀结尾的目录不会遍历和计算md5值)
* @return 系统所有文件md5之和
*/
public String traverseFolder(File file , String suffix){
if(file == null){
throw new NullPointerException("遍历路径为空路径或非法路径");
}
if (file.exists()) { //判断文件或目录是否存在
File[] files = file.listFiles();
if (files.length == 0) { // 文件夹为空
return null;
} else {
for (File f : files) { // 遍历文件夹
if (f.isDirectory()) { // 判断是否是目录
if(!(f.getName().endsWith(".no"))){ // 如果不是以.no结尾的目录 则计算该目录下的文件的md5值
// 递归遍历
traverseFolder(f,suffix);