ページ 11

C言語でOpenSSLを使ったAES暗号について

Posted: 2014年7月23日(水) 20:48
by だんごさん
C言語でOpenSSLを使い、文字列をAES暗号するプログラムを作っています。
ネットで調べて試行錯誤でやっていましたが、もう分からないことだらけなのでトピックを立てました。

質問内容をまとめました。

・暗号化、復号化関数を呼ぶたびに、初期化関数[EVP_CIPHER_CTX_init],[EVP_EncryptInit_ex]を呼び、最後に終了関数[EVP_CIPHER_CTX_cleanup]を呼ぶべきか。
・暗号化後にBase64にエンコードし、復号化前に暗号文をBase64にデコードするソースを見かけたが、あれは必要か。
・キー生成は自分で行うのか。またキーは文字なのか数字のみなのか。
・AES暗号に平文の文字数制限はあるか。

あまりにも情報が少なかったり、色々なサンプルソースにあるものないものがあったりして悩みました。
押し付けで申し訳ないですが、よろしくお願いします。

windows7, VC++2010

Re: C言語でOpenSSLを使ったAES暗号について

Posted: 2014年7月23日(水) 22:07
by h2so5
だんごさん さんが書きました: ・暗号化、復号化関数を呼ぶたびに、初期化関数[EVP_CIPHER_CTX_init],[EVP_EncryptInit_ex]を呼び、最後に終了関数[EVP_CIPHER_CTX_cleanup]を呼ぶべきか。
そうです。
だんごさん さんが書きました: ・暗号化後にBase64にエンコードし、復号化前に暗号文をBase64にデコードするソースを見かけたが、あれは必要か。
暗号文をテキストデータとしてやりとりしたい場合は、必要になります。
だんごさん さんが書きました: ・キー生成は自分で行うのか。またキーは文字なのか数字のみなのか。
基本的にOpenSSLの関数を使って生成します。キーはバイナリです。
だんごさん さんが書きました: ・AES暗号に平文の文字数制限はあるか。
ありません。
平文の長さは128bitの倍数である必要がありますが、デフォルトではOpenSSLが自動的にパディングをしてくれます。

Re: C言語でOpenSSLを使ったAES暗号について

Posted: 2014年7月24日(木) 00:24
by だんごさん
ありがとうございます。
だいぶ作業がはかどりそうです。

キー生成はAES_set_encrypt_keyか何かでしょうか?
質問ばかりで申し訳ないですがよろしくお願いします。

Re: C言語でOpenSSLを使ったAES暗号について

Posted: 2014年7月24日(木) 00:53
by h2so5
キーの生成はRAND_bytesを使います。

Re: C言語でOpenSSLを使ったAES暗号について

Posted: 2014年7月25日(金) 01:54
by だんごさん
ありがとうございます。
おかげでAES暗号が完成しました。