自分だけのクイズを作成しよう - Quipha
スポンサーリンク

【C++】OpenSSLのビルド、VS2019でインクルード

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

他にも私のブログで、C++について解説している記事がありますのでご覧ください。

Strawberry Perl

インストール

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

Strawberry Perl for Windows

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

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

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

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

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

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

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

スポンサーリンク

OpenSSL

ダウンロード

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

Downloads
The master sources are maintained in our git repository, which is accessible over the network and cloned on GitHub, at B...

以下のバージョンをダウンロードしました。
余談ですが、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のコードを書いてみました。
お疲れさまでした😊

他にも私のブログで、C++について解説している記事がありますのでご覧ください。

C++OSWindowsプログラミング
スポンサーリンク
この記事を共有
千草をフォローする
管理人

現役のITエンジニア。
気ままにコードや技術情報をまとめています。
Webアプリ/Windows・Macアプリ/モバイルアプリ/機械学習やIoT他。
(Java, PHP, Javascript, Swift, Python, C#, 他)
個人開発:Clibor, Quipha, TXT-Crypter
Kindle本: Laravel9 実践入門, 他

千草をフォローする
個人開発

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
Mac版も公開しています。

自分だけの問題集や問題を作成し、クイズを行い学習に活用しましょう。

Mac版Cliborです。
基本的な使い方は、Windows版と同じです。

麻雀の符計算をマスターしよう。

簡単にテキストを暗号・復号でき、秘密情報を守ります。

便利なツールを公開しています。
是非、活用してください!

コメント

  1. たあぼう より:

    このサイトの情報は大変、参考になりました。ありがとうございました。

    ただ、1点のみコメントです。
    追加のインクルードディレクトリのパス追加として以下が書かれています。
    C:\openssl-1.1.1k\include

    ここは、OpenSSLのコンパイル用の作業場所で、64bitのコンパイルをするとそれように変わりますので、libと同じ様に以下が正しかと思います。
    C:\openssl-1.1.1k\x86\include

    OpenSSL3.0.10での結果ですが、1.1.1でも同じかと思いました。