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

19 篇文章 1 订阅
1 篇文章 0 订阅

本文内容

本文介绍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。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值