回答編集履歴
1
パスワードから鍵・IVを得る方法について補足
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
…ただ、1. で指定したパスワードから鍵・IVを知る方法は、PHPの中ではおそらくありません。
|
13
13
|
ということで、今回は openssl コマンドを直接呼び出して復号する他はなさそうに思います。
|
14
|
-
|
14
|
+
→ 追記: opensslの内部動作に依存した方法ではありますが、鍵・IVを知る方法がありました。末尾に追記します
|
15
15
|
|
16
16
|
参考までに、以下 1, 2 の方法の違いです。
|
17
17
|
|
@@ -48,4 +48,15 @@
|
|
48
48
|
$keyhex="D2F94536C4F265D45FA439982476D5B877ED0D209D6627F41C326CDF07550FCC";
|
49
49
|
$ivhex ="B7B74563864C3A86FFCDAF0DB97B069A";
|
50
50
|
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",hex2bin($keyhex),OPENSSL_RAW_DATA,hex2bin($ivhex));
|
51
|
+
```
|
52
|
+
|
53
|
+
※追記
|
54
|
+
パスワード・salt→鍵・IVを知る方法はopenssl独自ですが、一応次の方法で真似ることはできます。ただ、指定するオプションによって細部は変わってきます。今回はデフォルト ( -md 未指定=sha256, pbkdf2 未使用 ) に対応した方法です。
|
55
|
+
|
56
|
+
```
|
57
|
+
$pass="xyz";
|
58
|
+
$salt=substr($enc,8,8);
|
59
|
+
$key=openssl_digest($pass.$salt,"sha256",true);
|
60
|
+
$iv=substr(openssl_digest($key.$pass.$salt,"sha256",true),0,16);
|
61
|
+
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",$key,OPENSSL_RAW_DATA,$iv);
|
51
62
|
```
|