文字列の暗号化、復号化をするには
解説
文字列の暗号化、および、復号化の方法をまとめます。
ここでは、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.オブジェクトの破棄、開放
- 「文字列の暗号化処理の手続き」の同じ項と同じ処理。