C言語で OpenSSL のライブラリを使って MD5 ハッシュ値を取得する

OpenSSL の Crypto library を使って MD5 ハッシュ値を求めるサンプルを書いてみたので、メモしておきます。

・crypto - OpenSSL cryptographic library
< https://www.openssl.org/docs/crypto/crypto.html >

MD5_Final - MD2, MD4, and MD5 hash functions
< https://www.openssl.org/docs/crypto/md5.html >

■ md5test.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>

void main()
{
    MD5_CTX c;
    char *data = "hoge";
    unsigned char md[MD5_DIGEST_LENGTH];
    char mdString[33];
    int r, i;
    
    r = MD5_Init(&c);
    if(r != 1) {
        perror("init");
        exit(1);
    }
    
    r = MD5_Update(&c, data, strlen(data));
    if(r != 1) {
        perror("update");
        exit(1);
    }
    
    r = MD5_Final(md, &c);
    if(r != 1) {
        perror("final");
        exit(1);
    }
 
    for(i = 0; i < 16; i++)
         sprintf(&mdString[i * 2], "%02x", (unsigned int)md[i]);
 
    printf("md5 digest: %s\n", mdString);
}

コンパイル

gcc md5test.c -lcrypto

■ 実行

./a.out hoge
md5 digest: ea703e7aa1efda0064eaa507d9e8ab7e

md5sum コマンドで取得したハッシュ値は以下。とりあえずあってそう。

echo -n hoge | md5sum
ea703e7aa1efda0064eaa507d9e8ab7e  -

以上です。


※ おそらく、unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md) だけでもできるんかな・・・まぁ、これはまた今度やろう。

[環境情報]
Ubuntu 14.04
gcc 4.8.2
OpenSSL 1.0.1f