自分だけのクイズ作成 - Quipha公開中

【C++】OpenSSLをビルドしてVisual Studio 2019で使用する

C++
スポンサーリンク

はじめに

今回は、OpenSSLをC++で使用する手順をまとめました。
OpenSSLをビルドし、ライブラリを作成、Visual Studio 2019のC++プロジェクトで設定を行い、コード上で使用できるようにしましょう🙂

VS2019でC++のプロジェクト作成や実行は以下の記事を参考にしてください。

環境
  • Windows 10
  • Visual Studio 2019
  • C++
  • Strawberry Perl 5.32.1.1
  • OpenSSL 1.1.1k

Strawberry Perl

インストール

OpenSSLをビルドするために、Strawberry Perlをインストールします。
以下のサイトからダウンロードを行います。

Strawberry Perl for Windows

64bit版のインストーラを選択しました。

ダウンロードしたインストーラを起動します。

ライセンスを読み次へ進みます。

任意でインストール先を選択します。

インストールボタンをクリックし、インストールを行います。

インストールが始まります。

インストールが完了しました。

OpenSSL

ダウンロード

ビルドを行うために、ソースをダウンロードします。

/source/index.html

以下のバージョンをダウンロードしました。
余談ですが、OpenSSLの脆弱性が発表されたばかりですので、以下の最新バージョンにしましょう。

ダウンロードしたopenssl-1.1.1k.tar.gzファイルを解凍します。

解凍したフォルダをCドライブの直下へ移動しました。(任意)

C:\Users\xx\Downloads\openssl-1.1.1k.tar\openssl-1.1.1k
↓以下に移動
C:\openssl-1.1.1k

ビルド

Developer Command Prompt for VS 2019を起動します。
Windowsの検索からも起動できます。

コンソールが起動されました。

以降、コンソール上でコマンドを実行していきます。
カレントディレクトリを移動します。

cd C:\openssl-1.1.1k

Configureを実行します。
32bit向けをビルドしてみます。

–prefixビルドファイルの出力先
–openssldirインストール先
C-WIN32 –prefix=%CD%\x86 –openssldir=%CD%\openssl no-asm no-sh
perl Configure VC-WIN32 --prefix=%CD%\x86 --openssldir=%CD%\openssl no-asm no-shared

ビルドとインストールを行います。
結構時間がかかります。私のPCでは15分程度かかりました。

nmake install

64bit向けのビルドは以下のように行います。

perl Configure VC-WIN64A --prefix=%CD%\x64 --openssldir=%CD%\openssl no-asm no-shared
nmake install

C++プロジェクトの設定

設定

Visual Studio 2019でC++のプロジェクトを作成しましょう。
プロジェクトの設定を開きます。

32bitの設定で行いますが、64bitでも同様の手順になります。
構成プロパティ→C/C++→全般の追加のインクルードディレクトリにパスを追加します。

C:\openssl-1.1.1k\include

構成プロパティ→リンカー→全般の追加のライブラリディレクトリにパスを追加します。

C:\openssl-1.1.1k\x86\lib

構成プロパティ→リンカー→入力の追加の依存ファイルの編集を行います。

使用するライブラリを追加します。

追加の依存ファイル
  • libssl.lib
  • libcrypto.lib

SHA512

今回はOpenSSLで使用できる、SHA512でハッシュ化をしてみたいと思います。

SHA-512とは、任意の長さの原文から固定長の特徴的な値を算出するハッシュ関数(要約関数)の一つ。どんな長さの原文からも512ビットのハッシュ値を算出する。

https://e-words.jp/w/SHA-512.html

SHA-2の一種であるSHA512は、出力は512ビット(64byte)で、ハッシュ値は16進(1byte=2桁)で表現されるので、128文字のデータが取得できます

ハッシュの特徴
  • あるデータをもとに、ハッシュ値を作れる。
  • 元データが同じであれば、同じハッシュ値が作れる。
  • ハッシュ値から元のデータに戻すことができない。(一方向性)

実装

それでは、文字列をSHA512でハッシュ化するコードを書いてみましょう。

#include <iostream>
#include <windows.h>
#include <openssl/sha.h>

int main()
{
	// ハッシュ化する文字列
	char data[] = "string to hash!";

	// ハッシュ生成
	unsigned char hash[SHA512_DIGEST_LENGTH];
	SHA512((BYTE*)data, sizeof(data) - 1, (BYTE*)hash);

	// 表示
	for (int i = 0; i < SHA512_DIGEST_LENGTH; ++i) {
		// 小文字の16進で表示
		printf("%02x", (unsigned char)hash[i]);
	}

	return 0;
}

それでは実行してみましょう。

以下の文字列がコンソールに表示されました。

1e07eb1570742d7f0fb1df11204c3f299599624a210078a3d36ba2bb3a155ccde79cfecb079c7a5f08a7a60aa07f1e922260be543ee17f1f24100233873a2105

以下のSHA512ハッシュ生成ツールを使用して、確認してみましょう。

SHA512ハッシュ生成ツール | ハッシュジェネレータ
SHA512ハッシュの生成ツールです。

C++で生成したハッシュと同じ結果を取得することができました。

さいごに

今回は、C++でOpenSSLのコードを書いてみました。
お疲れさまでした😊

コメント

タイトルとURLをコピーしました