OpenSSLを使った暗号化 (v1.1.1d)
2015-10-24にOpenSSLでの暗号化の記事を書いたけど、 最近になって試したところコンパイルできなくなっていたので、その修正版。
昔の記事、バージョン書いてなかったから差がわかんね。
環境
EVP_CIPHER_CTXの作成方法がEVP_CIPHER_CTX_newを使用するようになった
違いと言ってもEVP_CIPHER_CTX
の作成方法が異なるだけ。
通常の構造体として使えば良かったのがオペークポインタ形式になっているので、
専用関数で作成する。で、専用関数でリリースする。
// 昔の EVP_CIPHER_CTX ctx = {}; // 関数定義が非公開になったので、作れなくなった // 新しいの EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); // newで作って ... EVP_CIPHER_CTX_free(ctx); // freeで開放
暗号化処理に関してざっくり書くと、以下。EVP_CIPHER_CTX
の作成方法が変わっただけで、
それ以外の部分は古いバージョンとの違いは無い。
#include <openssl/evp.h> EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX_init(ctx); // 暗号化の設定で、EVP_aes_128_ecb等いろいろ const unsigned char iv[16] = {0}; EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); // ブロックサイズで割り切れる部分の処理 int outl = 0; EVP_EncryptUpdate(ctx, encrypted, &outl, data, data_size); // 最後のブロックの処理で、PKCSパディングされる。 int pad = 0; EVP_EncryptFinal_ex(ctx, encrypted + outl, &pad); EVP_CIPHER_CTX_cleanup(ctx); EVP_CIPHER_CTX_free(ctx);
ドキュメント
OpenSSLの公式ページの構成が変わっているので、古いURLはリンク切れになった。 以下は完全ソースコードとv1.1.1のドキュメントへのリンク。