回答編集履歴
1
パスワードから鍵・IVを得る方法について補足
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
ということで、今回は openssl コマンドを直接呼び出して復号する他はなさそうに思います。
|
26
26
|
|
27
|
-
|
27
|
+
→ 追記: opensslの内部動作に依存した方法ではありますが、鍵・IVを知る方法がありました。末尾に追記します
|
28
28
|
|
29
29
|
|
30
30
|
|
@@ -99,3 +99,25 @@
|
|
99
99
|
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",hex2bin($keyhex),OPENSSL_RAW_DATA,hex2bin($ivhex));
|
100
100
|
|
101
101
|
```
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
※追記
|
106
|
+
|
107
|
+
パスワード・salt→鍵・IVを知る方法はopenssl独自ですが、一応次の方法で真似ることはできます。ただ、指定するオプションによって細部は変わってきます。今回はデフォルト ( -md 未指定=sha256, pbkdf2 未使用 ) に対応した方法です。
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
```
|
112
|
+
|
113
|
+
$pass="xyz";
|
114
|
+
|
115
|
+
$salt=substr($enc,8,8);
|
116
|
+
|
117
|
+
$key=openssl_digest($pass.$salt,"sha256",true);
|
118
|
+
|
119
|
+
$iv=substr(openssl_digest($key.$pass.$salt,"sha256",true),0,16);
|
120
|
+
|
121
|
+
echo openssl_decrypt(substr($enc,16),"aes-256-cbc",$key,OPENSSL_RAW_DATA,$iv);
|
122
|
+
|
123
|
+
```
|