広告

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

C++

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

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

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

【C++】VS2019/2022のインストールとHello World!
Visual Studio 2019で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 | OpenSSL Library

以下のバージョンをダウンロードしました。
余談ですが、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プログラミング
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。 また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。 定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。 パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。 Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。 例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。 いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。 テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。 初心者の方はもちろん、もっと速く計算したい方にも役立ちます。 5万対局以上の実践から問題を収録。

コメント

  1. たあぼう より:

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

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

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

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

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