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) だけでもできるんかな・・・まぁ、これはまた今度やろう。