免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1709 | 回复: 0

perl语言编程-MD5应用篇 [复制链接]

论坛徽章:
0
发表于 2004-11-25 15:45 |显示全部楼层

  1. MD5算法是目前广为使用的杂凑算法,它一度被视为是牢不可破的。
  2. 然而这个神话在今年8月份轰然倒塌,中国王小云教授的一篇论文
  3. 宣告了它使命的终结。然而作为一种优秀的算法,在一定的领域内
  4. 它依然有着无可替代的作用。

  5. 在实际环境中,遇到这样一个问题。某公司的数据库为ora8,计划
  6. 升级为ora9i,由于数据库版本跨度大且为海量数据,计划由dsg软
  7. 件进行数据迁移。但在dsg测试中发现有数据丢失现象。现在要求
  8. 提供一种手段对迁移前后的数据进行比较验证,确保万无一失。
  9. 考虑到网上文件发布共享时广泛使用MD5提供对自身校验,显然这里
  10. 情况极为类似。

  11. 程序设计如下:打开一对管道,由父进程进行数据提取操作,传入
  12. 管道。子进程进行MD5校验。源码如下:

  13. unix# cat checkMD5

  14. #!/bin/perl

  15. use DBI;
  16. #use Proc::Fork;
  17. use IO::Pipe;
  18. use Digest::MD5;

  19. my $dbuser="test";
  20. my $passwd="test";
  21. my $dbstr="dbi:Oracle:ora8";

  22. my $sql=shift or die "I need a sql string\n" ;


  23. pipe(PIPE_READ,PIPE_WRITE) or die "Can't make pipe!\n";

  24. if ($pid = fork) {

  25.         close(PIPE_READ);

  26.         my $dbh = DBI->;connect ($dbstr, $dbuser, $passwd,
  27.             { RaiseError =>; 1, AutoCommit =>; 0 }) || die "$DBI::errstr";
  28.         my $sth = $dbh->;prepare($sql); $sth->;execute();
  29.         while(my @result=$sth->;fetchrow_array){
  30.                 print PIPE_WRITE @result,"\n";
  31.         }
  32.         $dbh->;disconnect();
  33.         close(PIPE_WRITE);
  34.         exit;

  35. } else {

  36.         defined $pid or die "can't fork:$!\n";
  37.         close(PIPE_WRITE);
  38.         binmode(PIPE_READ);
  39.         print Digest::MD5->;new->;addfile(*PIPE_READ)->;b64digest, "\n";
  40.         close(PIPE_READ);
  41.         exit;
  42. }

  43. 执行方法:perl checkMD5 "select * from test order by id"
  44. 该程序将会对 sql 语句的结果集进行 md5 校验,生成唯一的校验值。

  45. 缺点:1.结果集必须完全一致,因此要对主键进行排序。
  46.       2.对于千万级别的表,处理时间太长。
  47.       
  48. 改进方法:1.采用其他算法,在《应用密码学》一书中提到了一种杂凑算法,
  49.        与顺序无关。但没有找到进一步的资料,因此暂时用MD5 算法。希望
  50.        了解的朋友不吝赐教。
  51.        2.拟采用多进程方式,将ID值分成多个区间,并发查询。此是后话。
复制代码
[/code]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP