回答編集履歴

1

パスワードから鍵・IVを得る方法について補足

2021/10/26 11:16

投稿

angel_p_57
angel_p_57

スコア1681

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  ということで、今回は openssl コマンドを直接呼び出して復号する他はなさそうに思います。
26
26
 
27
- ※暗号化時PBKDF2を使っていれば、あるいはPHPなんとかできる可能性はありますが
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
+ ```