opensslを用いて、MD5のハッシュ値を求める

opensslのMD5関数

ハッシュ値を求める

#include <openssl/md5.h>

unsigned char *
MD5(const unsigned char *d, 
    unsigned long n, 
    unsigned char *md);

戻り値:MD5によるハッシュ値へのポインタ

  • d:ハッシュ値を求める元データ
  • n:元データdの長さ
  • md:元データdをハッシュした値(16バイトのバイナリデータ)


  • opensslのMD5関数でハッシュ値を求めるサンプル

    #include <stdio.h>
    #include <string.h>
    #include <openssl/md5.h>
    
    char *
    hexdigest(const char *key, int length)
    {
        static char hex[32 + 1];
        unsigned char digest[16];
        const char *hexformat =
            "%02x%02x%02x%02x%02x%02x%02x%02x"
            "%02x%02x%02x%02x%02x%02x%02x%02x";
    
        MD5((const unsigned char*)key, length, digest);
       
        snprintf(hex,
            sizeof(hex)/sizeof(hex[0]), 
            hexformat, 
            digest[0], digest[1], digest[2], digest[3],
            digest[4], digest[5], digest[6], digest[7],
            digest[8], digest[9], digest[10], digest[11],
            digest[12], digest[13], digest[14], digest[15]
        );
       
        return hex;
    }
    
    int
    main()
    {
        char *key = "5";
        char *digest;
    
        digest = hexdigest(key, strlen(key));
        printf("%s\n", digest);
    
        return 0;
    }
    

    ビルドするときは、gccに-lsslオプションをつける
    >gcc -lssl md5.c
    >./a.out
    >e4da3b7fbbce2345d7772b0674a318d5