专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 敏捷开发

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

发布时间:2011-06-20 17:23:59 文章来源:www.iduyao.cn 采编人员:星星草
Agile PLM: Checksum文件校验在File Server中的应用

本文内容

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

对于文件的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.ChecksumCalc
checksum value=2151428387, time=14342ms

网络下载应用

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

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

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

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: