文字列の暗号化、復号化をするには

解説

文字列の暗号化、および、復号化の方法をまとめます。

ここでは、Win32API の Cryptography Functions を利用した、文字列の暗号化、および、復号化の方法をまとめます。

準備

・windows.h および wincrypt.h のインクルード
#include <windows.h>
#include <Wincrypt.h>
をファイルヘッダー部に追加します。
これにより、Win32API の Cryptography Functions が使えるようになります。

文字列の暗号化処理の手続き

暗号化したい文字列とキー文字列をインプットとし、暗号化結果バイト列とバイト列のサイズをアウトプットします。

1.暗号化プロバイダの取得
CryptAcquireContext 関数を利用し、暗号化プロバイダ(HCRYPTPROV型オブジェクト)の取得をおこないます。
2.ハッシュオブジェクトの作成
CryptCreateHash 関数を利用し、ハッシュオブジェクト(HCRYPTHASH型オブジェクト)の作成をおこないます。
3.ハッシュオブジェクトに、ハッシュ値を求める元となるデータの追加
CryptHashData 関数を利用し、ハッシュオブジェクトに、ハッシュ値を求める元となるデータ(キー文字列)の追加をおこないます。
4.ハッシュオブジェクトから暗号キーの取得
CryptDeriveKey 関数を利用し、ハッシュオブジェクトから暗号キー(HCRYPTKEYオブジェクト)の取得をおこないます。
5.暗号化
CryptEncrypt 関数を利用し、暗号化したい文字列の暗号化をおこないます。
6.オブジェクトの破棄、開放
CryptDestroyKey 関数を利用し暗号キーの破棄、CryptDestroyHash 関数を利用しハッシュオブジェクトの破棄、CryptReleaseContext 関数を利用し暗号化プロバイダの開放、をおこないます。

暗号化されたデータの復号化処理

復号化したい暗号化されたバイト列とバイト列のサイズとキー文字列をインプットとし、復号化結果文字列をアウトプットします。

1.暗号化プロバイダの取得
「文字列の暗号化処理の手続き」の同じ項と同じ処理。
2.ハッシュオブジェクトの作成
「文字列の暗号化処理の手続き」の同じ項と同じ処理。
3.ハッシュオブジェクトに、ハッシュ値を求める元となるデータの追加
「文字列の暗号化処理の手続き」の同じ項と同じ処理。
4.ハッシュオブジェクトから暗号キーの取得
「文字列の暗号化処理の手続き」の同じ項と同じ処理。
5.復号化
CryptDecrypt 関数を利用し、復号化したい暗号化されたバイト列の復号化をおこないます。
6.オブジェクトの破棄、開放
「文字列の暗号化処理の手続き」の同じ項と同じ処理。

サンプルコード

ダウンロード

サンプルプロジェクト