はじめに
今回は、OpenSSLをC++で使用する手順をまとめました。
OpenSSLをビルドし、ライブラリを作成、Visual Studio 2019のC++プロジェクトで設定を行い、コード上で使用できるようにしましょう🙂
VS2019でC++のプロジェクト作成や実行は以下の記事を参考にしてください。
他にも私のブログで、C++について解説している記事がありますのでご覧ください。
Strawberry Perl
インストール
OpenSSLをビルドするために、Strawberry Perlをインストールします。
以下のサイトからダウンロードを行います。
64bit版のインストーラを選択しました。
ダウンロードしたインストーラを起動します。
ライセンスを読み次へ進みます。
任意でインストール先を選択します。
インストールボタンをクリックし、インストールを行います。
インストールが始まります。
インストールが完了しました。
OpenSSL
ダウンロード
ビルドを行うために、ソースをダウンロードします。
以下のバージョンをダウンロードしました。
余談ですが、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 | インストール先 |
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
構成プロパティ→リンカー→入力の追加の依存ファイルの編集を行います。
使用するライブラリを追加します。
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ハッシュ生成ツールを使用して、確認してみましょう。
C++で生成したハッシュと同じ結果を取得することができました。
さいごに
今回は、C++でOpenSSLのコードを書いてみました。
お疲れさまでした😊
他にも私のブログで、C++について解説している記事がありますのでご覧ください。
コメント
このサイトの情報は大変、参考になりました。ありがとうございました。
ただ、1点のみコメントです。
追加のインクルードディレクトリのパス追加として以下が書かれています。
C:\openssl-1.1.1k\include
ここは、OpenSSLのコンパイル用の作業場所で、64bitのコンパイルをするとそれように変わりますので、libと同じ様に以下が正しかと思います。
C:\openssl-1.1.1k\x86\include
OpenSSL3.0.10での結果ですが、1.1.1でも同じかと思いました。