・openSSL
⇒オープンソースで開発・提供されるソフトウェア。
SSL(Secure Sockets Layer)はセキュリティ通信を行うプロトコル。
・AES暗号化(Advanced Encryption Standard)
⇒秘密鍵を用いた暗号方式。
鍵長:128bit/192bit/256bit
ブロック長:128bit/192bit/256bit
■暗号化処理
/* ①初期化 */
int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ENGINE *impl,
unsigned char *key, unsigned
char *iv);
⇒引数
・[ctx] 暗号コンテキスト
・[type] 暗号アルゴリズム(※)
・[impl] 暗号化用に初期化(NULLでデフォルト指定)
・[key] 共通鍵暗号の鍵
・[iv] 初期ベクトル
/* ②暗号化 */
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
unsigned char *in, int inl);
⇒引数
・[ctx] 暗号コンテキスト
・[out] 暗号化後
・[outl] [out]のサイズ
・[in] 暗号化前(平文)
・[inl] [in]のサイズ
/* ③最後のブロックの暗号化 */
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigbed char *outm, int *outl);
⇒引数
・[ctx] 暗号コンテキスト
・[outm] 最終ブロックの暗号化
・[outl] [out]のサイズ
/* ④解放 */
void EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *ctx);
⇒引数
・[ctx] 暗号コンテキスト
■復号処理
/* ①初期化 */
int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ENGINE *impl,
unsigned char *key, unsigned
char *iv);
⇒引数
・[ctx] 復号用のコンテキスト
・[type] 暗号関数(EVP_aes_128_cbc)
・[impl] 暗号化用に初期化(NULLでデフォルト指定)
・[key] 共通鍵暗号の鍵
・[iv] 初期ベクトル
/* ②復号 */
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
unsigned char *in, int inl);
⇒引数
・[ctx] 復号用のコンテキスト
・[out] 復号後(平文)
・[outl] [out]のサイズ
・[in] 復号化前(復号化)
・[inl] [in]のサイズ
/* ③最後のブロックの復号 */
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigbed char *outm, int *outl);
⇒引数
・[ctx] 復号用のコンテキスト
・[outm] 最終ブロックの復号
・[outl] [out]のサイズ
/* ④解放 */
void EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *ctx);
⇒引数
・[ctx] 復号用のコンテキスト
①初期化処理
(※)暗号アルゴリズム
・EVP_aes_128_cbc
⇒(aes)AES暗号化、(128)ビット、(cbc)CBCモード
・CBCモード(Cipher Block Chaining Mode)
⇒平文の各ブロックは前の暗号文のXOR(排他的論理和)を取る形式で
最も広く用いられている暗号利用モード。
・その他の暗号利用モード
ECPモード(Electronic Codebook)
CFBモード(Cipher Codebook)
OFBモード(Output Codebook)
②暗号化(復号)処理
[in]から始まる [inl]バイトのデータを暗号化 (復号)する。
[out]に出力する [out]に書き込まれたバイト長が [outl]に設定される。
連続するデータブロックを暗号化(復号)する際は当関数を複数回呼び出す。
③最終ブロックの暗号化(復号)処理
ブロック長に満たないデータをパディング処理し暗号化(復号)する。
④解放
暗号(復号用)コンテキストを解放する。
・補足
ヘッダファイル[openssl/evp.h]をインクルードする。
#include <openssl/evp.h>
以上
コメントをお書きください