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 );
}
学习的目标是成熟!~~~