0

これは不可能な質問かもしれませんが、レガシー システムを Java から PHP に移行しているので、Jasypt で暗号化された文字列を PHP で復号化できる必要があります。

ドキュメントによると、Jasypt は次のアルゴリズムを使用します。

  • 暗号化するデータにランダムソルト(暗号の初期化ベクトルと同じだと思います)を追加します
  • 1000回繰り返し暗号化する
  • 暗号化されていないソルト/IV を暗号化された文字列に追加します
  • 文字列全体を Base64 でエンコードする

レガシー アプリケーションはPBEWithMD5AndDESJasypt アルゴリズムを使用します。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");
}
4

3 に答える 3

5

「PBEWithMD5AndDES」の意味を理解していません。

PBEWithMD5AndDES は、暗号化されるテキストとともに DES アルゴリズムへの暗号化キー入力として使用されるバイトの配列を取得するために、暗号化パスワード (文字列) が MD5 でハッシュされることを意味します。

したがって、MD5 ハッシュを取得するために DES で暗号化を解除する方法はありません。それは意味がありません。まったく同じアルゴリズムを使用して、その暗号化されたデータを復号化する必要がありますが、PHP 実装です。

ところで、「PBEWithMD5AndDES」は「jasypt アルゴリズム」ではありません。これは Java Cryptography Extension (JCE) アルゴリズムです。Jasypt 自体はアルゴリズムを実装していません。

お役に立てれば。

于 2010-12-22T00:30:51.847 に答える
1

キーを生成していません。

私は私の顧客に対して同じことをしなければならず、問題を解決するために数行のコードを書きました: https://github.com/kevinsandow/PBEWithMD5AndDES

于 2014-01-28T13:26:47.537 に答える
1

PHP for Java の簡易暗号化はこちら: https://github.com/kevwis/Phpsypt

于 2013-08-09T17:12:09.620 に答える