OpenSSLにて暗号化された
opensslコマンドかと推測しますが、暗号化した方法を詳らかにしてください。
以下、opensslコマンドでの暗号化と仮定しますが、この場合鍵の指定法は大きく2通りあります。付け加えると、鍵だけでなくIV(初期化ベクトル)というデータも必要です。
- パスワードを与えてsalt(ツールがランダム生成)を加えて変換して鍵・IVを生成
- 鍵・IVを明示的に指定
ところが、質問の中にIVの話が出てきません。ということは、1. のパスワードのことを「鍵」と誤認識しているのではないかと思います。
PHPのopenssl_encrypt/decryptは 2. の方に対応した機能なので、1. しか意識してない状態では使えません。
…ただ、1. で指定したパスワードから鍵・IVを知る方法は、PHPの中ではおそらくありません。
ということで、今回は openssl コマンドを直接呼び出して復号する他はなさそうに思います。
→ 追記: opensslの内部動作に依存した方法ではありますが、鍵・IVを知る方法がありました。末尾に追記します
参考までに、以下 1, 2 の方法の違いです。
===
例えば abc.txt を、opensslコマンドで、パスワード "xyz" で暗号化して enc.dat に保存するとします ( base64化はナシとします )。これは 1. に沿った方法です。
$ openssl enc -aes-256-cbc -pass pass:xyz -in abc.txt -out enc.dat
同じく 1. に沿った方法で復号する場合のコマンドは次になります。
$ openssl enc -d -aes-256-cbc -pass pass:xyz -in enc.dat
これを 2. に沿った方法で扱う場合、鍵・IVを調べ、その上でオプションを指定しなければなりません。
※-K,-ivオプションが相当します。指定する値は、暗号化時に割り当てられたsaltによっても変わることに注意してください。
※tailしているのは、先頭にあるsalt情報を取り除くためです。
$ openssl enc -P -d -aes-256-cbc -pass pass:xyz -in enc.dat # 鍵・IVの調査
salt=82A583025BF446D0
key=D2F94536C4F265D45FA439982476D5B877ED0D209D6627F41C326CDF07550FCC
iv =B7B74563864C3A86FFCDAF0DB97B069A
$ tail -c +17 enc.dat | openssl enc -d -aes-256-cbc -K D2F94536C4F265D45FA439982476D5B877ED0D209D6627F41C326CDF07550FCC -iv B7B74563864C3A86FFCDAF0DB97B069A
で、これに対応するPHPでの関数の使い方は次のようになります。
※$enc
が enc.dat の内容をそのまま保持しているものとします。
$keyhex="D2F94536C4F265D45FA439982476D5B877ED0D209D6627F41C326CDF07550FCC";
$ivhex ="B7B74563864C3A86FFCDAF0DB97B069A";
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",hex2bin($keyhex),OPENSSL_RAW_DATA,hex2bin($ivhex));
※追記
パスワード・salt→鍵・IVを知る方法はopenssl独自ですが、一応次の方法で真似ることはできます。ただ、指定するオプションによって細部は変わってきます。今回はデフォルト ( -md 未指定=sha256, pbkdf2 未使用 ) に対応した方法です。
$pass="xyz";
$salt=substr($enc,8,8);
$key=openssl_digest($pass.$salt,"sha256",true);
$iv=substr(openssl_digest($key.$pass.$salt,"sha256",true),0,16);
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",$key,OPENSSL_RAW_DATA,$iv);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/28 01:11
2021/10/28 10:56
2021/10/28 14:03 編集
2021/10/28 14:18
2021/10/28 14:46
2021/10/28 14:48
2021/10/28 15:09
2021/10/28 16:27