質問: 暗号化、PHPを勉強しています。 vb.netで暗号化したデータをPHPで復号しようとしていますが、うまくいきません。 vb.netのプログラムは以下です。(コードが長いため参考サイトのリンクで失礼します) VBめも-文字列暗号化 以下の点がわかりません。 ・暗号化方式はDESになるのか ・vb.netでは$ivにバイト配列が入るようだがPHPでは何を指定すればよいのか 何かヒントやアドバイスなどいただけないでしょうか。 試しているコードは以下です。 ```
回答: > > ・暗号化方式はDESになるのか > > > `openssl_encrypt`の第二引数のことでしたら、`openssl_get_cipher_methods()`が返すリストまたは`openssl enc -list`コマンドが返すリストから選択する必要があります。今回の例だと`des`または`des-cbc`になると思います。 > > ・vb.netでは$ivにバイト配列が入るようだがPHPでは何を指定すればよいのか > > > PHPはバイト配列は文字列型で扱います。VB.netでいうところの`{0, 1, 2}`は ``` "\x00\x01\x02" ``` になります。 > > $key = "key"; > > > openssl_encryptに渡す`key`はパスワードではありません。暗号アルゴリズムごとに決まっている長さのデータである必要があります。 元のサイトのコードでは、これをごにょごにょするコードがありますが、あなたのコードにはそれがありません。 パッと見で気づいた「うまくいかない」理由になりそうなところはそのあたりですが、もっと手前の話として、元のサイトのコードは10年前に書かれたことを差し引いても十分に質が低いもので、参考にすべきではありません。 * 10年前の基準でもDESは使うべきではない * 鍵やIVの意味を理解していない(ので、「パスワード」を自力でごにょごにょしている) 暗号を扱うのであれば、暗号技術入門(ISBN 978-4-7973-8222-8)を一読されることをお勧めします。これを読めばパッとコードが書けるようになる、というものではないですが、ドキュメントやリファレンスを読むためには基礎知識が必要です。