質問: openssl_decrypt($password, $method, $key, $options, $iv); 結果 false ``` 特にエラーが出ているわけでもないので何がダメなのかさっぱりです。どこかおかしなところはありますでしょうか?
回答: 暗号化したものを復号する場合、特に共通鍵暗号の場合は、次の3つが必要になります。 1. 暗号文そのもの 2. 暗号化時に与えた鍵 3. 同じく、暗号化時に与えた**初期化ベクトル(iv)** 挙げられたコードだと、暗号化したときと iv が異なるでしょうから、復号に失敗するのは当然です。 なぜ初期化ベクトルがあるのか: AESはブロック暗号です。ブロック単位で暗号化を行い、ひとつ前のブロックの(暗号化後の)情報をもとに次のブロックの暗号化を行います。 ということは、もし平文の「先頭のブロック」が同一の情報であった場合、暗号化した後の先頭のブロックもまた同一になってしまいます。 ※例えばビジネスメールの先頭によくある、「拝啓 貴社ますますご清栄のことと...」のような定型文があれば、その部分は同じになってしまいます。 これでは、平文「そのもの」はわからないにしても、「似たような文書である」ということが分かってしまい、暗号としては強度が落ちます。 これを回避するために、先頭のブロックのさらに前に、「毎回ランダムな」ブロックを一つ用意して、暗号化後の先頭ブロックが同一になるのを避けています。これが初期化ベクトルです。(なので初期化ベクトルはブロック長と同一サイズになる) 当然、復号する際にこの初期化ベクトルが分からなければ、まともに復号できません。 ※当然ながら、初期化ベクトルを毎回同一にしてしまっては意味がありません