现在的位置: 首页 > 综合 > 正文

开源项目之MD5校验工具 md5deep

2013年11月09日 ⁄ 综合 ⁄ 共 1404字 ⁄ 字号 评论关闭

md5deep是一套跨平台的方案,计算和比较MD5等哈希加密信息的摘要(MD5, SHA-1, SHA-256, Tiger,Whirlpool)。
主要的功能:
可以递归检查整个目录树
可以接受已知的哈希值,并把它们比作一组输入文件的列表。
     当处理非常大的文件时就会产生的时间估计!
 散列输入文件中的任意大小的块
 可以处理只有某种类型的文件

项目(release-4.0.0)目录如图:

安装方式(以Ubuntu 6.10 Edgy为例):
$ sudo apt-get install md5deep
计算aaa目录下所有档案的MD5并存成aaa.md5:
$ md5deep -l -r aaa > aaa.md5
同上, 但是以binary方式计算:
$ md5deep -k -l -r aaa > aaa.md5
比对 *.iso 挡的MD5是否跟 xxx.md5 里的MD5是否一样, 并列出比对无误的档案:
$ md5deep -m xxx.md5 *.iso
同上, 但列出比对时发现错误的档案:
$ md5deep -x xxx.md5 *.iso
同上, 但列出比对时发现错误的档案时也一并列出该档的MD5:
$ md5deep -X xxx.md5 *.iso
同上, 但比对过程中显示进度:
$ md5deep -e -X xxx.md5 *.iso
其他参数可下 md5deep -h或info md5deep查看说明.

main代码:

int main( int argc, char *argv[] )
{
  FILE *f;
  int i, j;
  char output[65];
  context_sha256_t ctx;
  unsigned char buf[1000];
  unsigned char sha256sum[32];

  if( argc < 2 )
    {
      printf( "\n SHA-256 Validation Tests:\n\n" );

      for( i = 0; i < 3; i++ )
        {
	  printf( " Test %d ", i + 1 );

	  //
	  sha256_starts( &ctx );

	  if( i < 2 )
            {
	      sha256_update( &ctx, (uint8_t *) msg[i],
			     strlen( msg[i] ) );
            }
	  else
            {
	      memset( buf, 'a', 1000 );

	      for( j = 0; j < 1000; j++ )
                {
		  sha256_update( &ctx, (uint8_t *) buf, 1000 );
                }
            }

	  sha256_finish( &ctx, sha256sum );

	  for( j = 0; j < 32; j++ )
            {
	      sprintf( output + j * 2, "%02x", sha256sum[j] );
            }

	  if( memcmp( output, val[i], 64 ) )
            {
	      printf( "failed!\n" );
	      return( 1 );
            }

	  printf( "passed.\n" );
        }

      printf( "\n" );
    }
  else
    {
      if( ! ( f = fopen( argv[1], "rb" ) ) )
        {
	  perror( "fopen" );
	  return( 1 );
        }

      sha256_starts( &ctx );

      while( ( i = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
        {
	  sha256_update( &ctx, buf, i );
        }

      sha256_finish( &ctx, sha256sum );

      for( j = 0; j < 32; j++ )
        {
	  printf( "%02x", sha256sum[j] );
        }

      printf( "  %s\n", argv[1] );
    }

  return( 0 );
}

学习的目标是成熟!~~~

抱歉!评论已关闭.