C言語にて Openssl を使って SHA1 ハッシュを計算する

Openssl は SSLプロトコルのライブラリです。

SHA1ハッシュ関数の1つです。

ハッシュ関数は任意のデータから短い値を得るための関数です。

その値をハッシュ(hash)あるいはダイジェス(digest)という。

wikipedia: OpenSSL

wikipedia: SSL (Secure Sockets Layer) / TSL(Transport Layer Security)

wikipedia: SHA-1

wikipedia: ハッシュ関数

Openssl にはハッシュ関数として
sha1, sha256, sha512, md5 が用意されている。

Mac の場合、OpenSSLはプレインストールされている。
brew コマンドで最新版をインストールすることもできる。

Homebrew: openssl

qiita: Homebrewとopensslのインストール

ハッシュ関数の使い方は、下記を参考にした。

C言語で OpenSSL の SHA256 ハッシュ関数を使ってみる

int main(int argc, char *argv[])
{
    char *message = {"Sample Message"};
    unsigned char digest[SHA256_DIGEST_LENGTH];
    SHA256_CTX sha_ctx;
    SHA256_Init(&sha_ctx);
    SHA256_Update(&sha_ctx, message, sizeof(message)); 
    SHA256_Final(digest, &sha_ctx); 
    printf("%s\n", message);
    for (int i = 0; i < sizeof(digest); ++i) {
        printf("%x", digest[i]);
    }
    printf("\n");
    return 0;
}

このコードはSHA256のものです。

SHA1は下記のようになる。

void gen_sha1(char* message, unsigned char* digest)
{
    SHA_CTX ctx;
// initialize the context
    SHA1_Init(&ctx);
// input message
    SHA1_Update(&ctx, message, sizeof(message)); 
// output to digest
    SHA1_Final(digest, &ctx);
}

サンプルコードを Github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/openssl/hash