これは不可能な質問かもしれませんが、レガシー システムを Java から PHP に移行しているので、Jasypt で暗号化された文字列を PHP で復号化できる必要があります。
ドキュメントによると、Jasypt は次のアルゴリズムを使用します。
- 暗号化するデータにランダムソルト(暗号の初期化ベクトルと同じだと思います)を追加します
- 1000回繰り返し暗号化する
- 暗号化されていないソルト/IV を暗号化された文字列に追加します
- 文字列全体を Base64 でエンコードする
レガシー アプリケーションはPBEWithMD5AndDES
Jasypt アルゴリズムを使用します。MD5 が解読できるように設計されていないことは十分承知しており、それは私がやろうとしていることではありません。
MD5 ハッシュだけが残るように、文字列を DES で復号化したいだけです。PHP からバイナリのガベージ以外は何も得られないようです。私は何が欠けていますか?
<?php
#jasypt.algorithm=PBEWithMD5AndDES
$secret = 'secret-password';
$encrypted = 'xh/roK2diJPDfZGlT9DlwuG2TsS7t7F+';
$cipher = MCRYPT_DES;
$modes = array(
'ecb' => MCRYPT_MODE_ECB,
'cbc' => MCRYPT_MODE_CBC,
'cfb' => MCRYPT_MODE_CFB,
'ofb' => MCRYPT_MODE_OFB,
'nofb' => MCRYPT_MODE_NOFB,
'stream' => MCRYPT_MODE_STREAM,
);
foreach($modes as $mode => $mc) {
$iv_len = 0; //mcrypt_get_iv_size($cipher, $mode);
$password = base64_decode($encrypted);
$salt = substr($password, 0, $iv_len);
$data = substr($password, $iv_len);
for($i = 0; $i < 1000; $i++) {
$data = @mcrypt_decrypt($cipher, $secret, $data, $mode, $salt);
}
var_dump("$mode: $i: $data");
}