ダイジェスト用の大きなファイルを生成しようとしました。以下で使用した場合 openssl rand 8096 | head -c 8096 > rnddata、大丈夫でした。
 ./hash_test sha1
ダイジェストは次のとおりです
。  
しかし、rnddata のサイズが 9000 以上の場合、ダイジェストの結果は異なりました。
openssl ランド 9000 | head -c 9000 > rnddata 
openssl dgst -sha1 rnddata 
SHA1(rnddata)= 4ef5b73ee39f0f2ac6d341c55467c182786cab65 
./hash_test sha1
ダイジェスト: 691747a97aee32ddf04b3bf5644b5d74c4b69657   
以下はテスト用の私のCコードです
#include <stdio.h>
#include <openssl/evp.h>
main(int argc, char *argv[])
{
    EVP_MD_CTX mdctx;
    const EVP_MD *md;
    FILE *fr;
    size_t bytes;
    char mystring[32];
    fr = fopen("/home/root/rnddata", "r");
    if(fr == NULL) 
        printf("Error opening file\n");
    unsigned char md_value[EVP_MAX_MD_SIZE];
    int md_len, i; 
    OpenSSL_add_all_digests();
    //OpenSSL_add_all_algorithms();
    if(!argv[1]) {
        printf("Usage: mdtest digestname\n");
        exit(1);
    }
    //md = EVP_get_digestbyname(argv[1]);
    md = EVP_sha1();
    if(!md) {
        printf("Unknown message digest %s\n", argv[1]);
        exit(1);
    }
    EVP_MD_CTX_init(&mdctx);
    EVP_DigestInit_ex(&mdctx, md, NULL);
    while ((bytes = fread (mystring, 1, 32, fr)) != 0)
        EVP_DigestUpdate(&mdctx, mystring, bytes);
    EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
    EVP_MD_CTX_cleanup(&mdctx);
    printf("Digest is: ");
    for(i = 0; i < md_len; i++)
        printf("%02x", md_value[i]);
    printf("\n");
    fclose(fr);
}
どんな助けでも大歓迎です。