首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Agile PLM: Checksum资料校验在File Server中的应用

2012-12-23 
Agile PLM: Checksum文件校验在File Server中的应用本文内容本文介绍Agile PLM中File Manager文件服务器所

Agile PLM: Checksum文件校验在File Server中的应用
本文内容

本文介绍Agile PLM中File Manager文件服务器所使用的checksum校验原理及相关知识。在Agile中如果启用了Checksum功能,我们有时能在下载文件、checkout或者checkin的时候,碰到如下错误,即表示原始文件遭到了外部程序的篡改。

Agile PLM: Checksum资料校验在File Server中的应用

对于文件的checksum校验有非常多的方法,常见的有SHA1, MD5和CRC32。在Agile PLM中,文件的Checksum使用CRC32。对CRC算法感兴趣的可以查看此文:
http://en.wikipedia.org/wiki/Cyclic_redundancy_check

 

Agile中的Checksum

在Agile中每次上传文件后,新计算出的checksum值保存到file_info表的checksum_value栏位。在checkout(get)前,会重新计算文件服务器上的文件checksum并和数据库中的值做比较。

由于checksum的计算需要消耗一定的时间,对于大文件,可能出现秒级的延迟。在Agile PLM9.3.1.2中打开File Server的DEBUG开关做如下测试查看延时信息。
1. 当上传729,207,676字节(约720M)大小的文件时,日志显示checksum的计算耗时2.078秒。

<2012-12-09 19:51:23,545> <Vault:INFO> Entering updateChecksum => File ID:6020222 Vault Type :Standard Vault : Primary VaultRelativeFilePath :000/060/202/AGILE_16020222.zip<2012-12-09 19:51:23,559> <EventDispatcher:DEBUG> Inside postCheckIn =>ServerContext:com.agile.webfs.components.security.ServerContext@d306dd File ID :6020222Checksum value :0 EIFS filepath :null IFS filepath :000/060/202/AGILE_16020222.zip HFS filepath :null Locations :http://localhost:8080/Filemgr/services/FileServer File type :zip<2012-12-09 19:51:23,559> <Checksum:INFO> Checksum Enabled:true<2012-12-09 19:51:25,637> <Checksum:INFO> Computed checksum value: 3309565842<2012-12-09 19:51:25,637> <TimerUtil:DEBUG> Action:Checksum::postCheckIn Time Taken:2.078 secs<2012-12-09 19:51:25,637> <FMInformationStore:INFO> Adding file information fileID :6020222 EIFS filepath :null IFS filepath :000/060/202/AGILE_16020222.zip HFS filepath :null Locations :http://localhost:8080/Filemgr/services/FileServer File type :zipPersistence Level :1<2012-12-09 19:51:25,637> <TimerUtil:DEBUG> Action:EventDispatcher::postCheckIn Time Taken:2.078 secs<2012-12-09 19:51:25,637> <TimerUtil:DEBUG> Action:Vault:: updateChecksum Time Taken:2.092 secs<2012-12-09 19:51:25,637> <FileServerDispatcher:DEBUG> Leaving updateCheckSum

 

2. 下载相同大小的文件,checksum被重新计算,耗时为2.559秒。

<2012-12-09 20:18:49,719> <Checksum:INFO> Checksum Enabled:true<2012-12-09 20:18:52,278> <Checksum:INFO> Computed Checksum value: 3309565842<2012-12-09 20:18:52,278> <TimerUtil:DEBUG> Action:Checksum::preCheckOut Time Taken:2.559 secs

上述计算都在Tomcat服务器的JVM中完成,因此适当提高文件服务器的CPU也是可以考虑的范围。

 

企业开发应用

Checksum可以运用在我们自己的应用程序开发中。使用java.util.zip.CRC32非常方便高效。下述代码演示了使用CRC32类来快速计算一个1,444,792,736字节(约1.2G)大小的文件的checksum值,耗时14342毫秒。必须注意的是此处的checksum value是个十进制。

package zigzag.research.checksum;import java.io.*;import java.util.zip.CRC32;public class ChecksumCalc {    public static void main(String args[]) {        final int BUFFER_SIZE = 1024;        byte[] buffer = new byte[BUFFER_SIZE];        CRC32 checksum = new CRC32();        InputStream is = null;        int length;        long begin = System.currentTimeMillis();        long end;        try {            is = new FileInputStream(new File("d:\\java_pid3256.hprof"));            checksum.reset();            while ((length = is.read(buffer, 0, BUFFER_SIZE)) != -1) {                checksum.update(buffer, 0, length);            }            end = System.currentTimeMillis();            System.out.println("checksum value=" + checksum.getValue() + ", time=" + (end-begin) + "ms");        } catch (Exception e) {            e.printStackTrace();        }    }}


运行结果:

D:\Program\Java\jdk1.5.0_07\bin\java zigzag.research.checksum.ChecksumCalcchecksum value=2151428387, time=14342ms
网络下载应用

checksum的校验在国外的各类下载应用中十分普遍,目的就是为了防范文件被恶意篡改。比如下面的一个文件下载提供了SHA1的校验值供用户检查文件是否合法。

Agile PLM: Checksum资料校验在File Server中的应用

我们可以使用免费的checksum计算工具HashCalc,下载地址为: http://www.slavasoft.com/hashcalc/index.htm

以上述Java代码计算的checksum来做例子运行HashCalc,得到十六进制的803C3123,就是上述十进制的2151428387。

 Agile PLM: Checksum资料校验在File Server中的应用

热点排行