如何计算在C大文件的MD5哈希? [英] How to calculate the MD5 hash of a large file in C?
本文介绍了如何计算在C大文件的MD5哈希?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用OpenSSL库C语言编写。
我如何计算一个大文件使用MD5哈希?
据我所知,我需要加载整个文件到内存的字符数组,然后调用哈希函数。但是,如果该文件是关于什么的4Gb长时间?听起来像一个坏主意。
解决:感谢 askovpen ,我发现我的错误。我用
,而((字节= FREAD(数据,1,1024,INFILE))!= 0)
MD5_Update(安培; mdContext,数据,1024);
不是
,而((字节= FREAD(数据,1,1024,INFILE))!= 0)
MD5_Update(安培; mdContext,数据,字节);
解决方案
例如
GCC -lssl -lcrypto -g -Wall -o文件file.c中
的#include<&stdio.h中GT;
#包括LT&;的OpenSSL / md5.h>诠释的main()
{
unsigned char型C [MD5_DIGEST_LENGTH]
字符*文件名=file.c中;
INT I;
FILE * INFILE = FOPEN(文件名,RB);
MD5_CTX mdContext;
诠释字节;
unsigned char型数据[1024]; 如果(INFILE == NULL){
的printf(%s不能打开\\ n,文件名);
返回0;
} MD5_Init(安培; mdContext);
而((字节= FREAD(数据,1,1024,INFILE))!= 0)
MD5_Update(安培; mdContext,数据,字节);
MD5_Final(C,&安培; mdContext);
对于(i = 0; I< MD5_DIGEST_LENGTH;我++)的printf(%02X,C [I]);
的printf(%S \\ n,文件名);
FCLOSE(INFILE);
返回0;
}
结果:
$的md5sum file.c中
25a904b0e512ee546b3f47574703d9fc file.c中
$ ./file
25a904b0e512ee546b3f47574703d9fc file.c中
I am writing in C using OpenSSL library.
How can I calculate hash of a large file using md5?
As I know, I need to load a whole file to RAM as char array and then call the hash function. But what if the file is about 4Gb long? Sounds like a bad idea.
SOLVED: Thanks to askovpen, I found my bug. I've used
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
MD5_Update (&mdContext, data, 1024);
not
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
MD5_Update (&mdContext, data, bytes);
解决方案
example
gcc -lssl -lcrypto -g -Wall -o file file.c
#include <stdio.h>
#include <openssl/md5.h>
int main()
{
unsigned char c[MD5_DIGEST_LENGTH];
char *filename="file.c";
int i;
FILE *inFile = fopen (filename, "rb");
MD5_CTX mdContext;
int bytes;
unsigned char data[1024];
if (inFile == NULL) {
printf ("%s can't be opened.\n", filename);
return 0;
}
MD5_Init (&mdContext);
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
MD5_Update (&mdContext, data, bytes);
MD5_Final (c,&mdContext);
for(i = 0; i < MD5_DIGEST_LENGTH; i++) printf("%02x", c[i]);
printf (" %s\n", filename);
fclose (inFile);
return 0;
}
result:
$ md5sum file.c
25a904b0e512ee546b3f47574703d9fc file.c
$ ./file
25a904b0e512ee546b3f47574703d9fc file.c
这篇关于如何计算在C大文件的MD5哈希?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文