#include <stdio.h>
#include <openssl/evp.h>
int main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
char buf[4096];
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i, len;
FILE * fp = NULL;
OpenSSL_add_all_digests();
if(!argv[1]) {
printf("Usage: %s <filename>\n", argv[0] );
return -1;
}
fp = fopen(argv[1], "r");
if (fp == NULL) {
perror("open file failed\n");
return -1;
}
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, EVP_md5(), NULL); //此处可以使用EVP_sha1()等其他摘要算法
while(1) {
len = fread(buf, 1, 4096, fp);
if (len > 0) {
EVP_DigestUpdate(&mdctx, buf, len);
}
if (feof(fp) || ferror(fp)) {
break;
}
}
fclose(fp);
EVP_DigestFinal_ex(&mdctx, md