豚吐露@wiki
EVP API
最終更新:
Bot(ページ名リンク)
-
view
EVP API
EVP APIを使用する場合、以下のheader fileのincludeが必要。
openssl/evp.h
openssl/evp.h
<openssl/evp.h>
【Define】
【struct】
EVP_CIPHER_CTX
EVP_CIPHER_CTX
EVP APIを用いて暗号化を行う場合、暗号化に必要な情報は本構造体へ格納し、APIへ提供する。
本構造体は領域確保後、必ず『EVP_CIPHER_CTX_init()』で初期化を行うこと。
【API】
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a)
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a)
■概要 EVP_CIPHER_CTX構造体の初期化API ■引数 a: ( /o)初期化対象の暗号化context ■戻り値 無し
int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv)}
■概要 EVP_CIPHER_CTX構造体へ暗号化に必要な情報を設定する。 でもこれ古いAPIみたいなので、EVP_EncryptInit_ex()を使った方が良いらしい。 ■引数 EVP_CIPHER_CTX *ctx: (i/o)暗号化context const EVP_CIPHER *cipher: (i/ )暗号化typeを決定するobjectを指定 const unsigned char *key: (i/ )暗号化/復号化に使用する鍵を指定 const unsigned char *iv: (i/ )暗号化/復号化に使用するIVを指定 ■戻り値
■概要 ■引数 ■戻り値
【Example】
参照)http://linux.die.net/man/3/evp_cipherinit
参照)http://linux.die.net/man/3/evp_cipherinit
int do_crypt(FILE *in, FILE *out, int do_encrypt) { /* Allow enough space in output buffer for additional block */ inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH]; int inlen, outlen; /* Bogus key and IV: we'd normally set these from * another source. */ unsigned char key[] = "0123456789"; unsigned char iv[] = "12345678"; /* Don't set key or IV because we will modify the parameters */ EVP_CIPHER_CTX_init(&ctx); EVP_CipherInit_ex(&ctx, EVP_rc2(), NULL, NULL, NULL, do_encrypt); EVP_CIPHER_CTX_set_key_length(&ctx, 10); /* We finished modifying parameters so now we can set key and IV */ EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt); for(;;) { inlen = fread(inbuf, 1, 1024, in); if(inlen <= 0) break; if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen)) { /* Error */ EVP_CIPHER_CTX_cleanup(&ctx); return 0; } fwrite(outbuf, 1, outlen, out); } if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen)) { /* Error */ EVP_CIPHER_CTX_cleanup(&ctx); return 0; } fwrite(outbuf, 1, outlen, out); EVP_CIPHER_CTX_cleanup(&ctx); return 1; }
更新日: 2010年03月11日 (木) 11時37分26秒
- http://linux.die.net/man/3/evp_cipherinit 英語だけど実際の暗号化・復号化sample sourceがあるので、参照したら簡単に実装できる。 -- (s1n) 2010-03-11 10:07:29