2012-04-17 2 views
3

私はPHP(またはJavascript)でサービスコールを解読する必要があります。私はこれを達成しようと一日中努力しましたが、これを正しく解読することができませんでした。DES/ECB/PKCS5 PHPで復号化を埋め込む

参考として、サービスプロバイダは、私にJavaで次の復号化サンプルコードを送っ:

DESKeySpec dks = new DESKeySpec("keyword".getBytes()); 
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
SecretKey key = keyFactory.generateSecret(dks); 

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
SecureRandom sr = new SecureRandom(); 
cipher.init(Cipher.DECRYPT_MODE, key ,sr); 

byte b[] = response.toByteArray();  
byte decryptedData[] = cipher.doFinal(b); 

私は、私が使用して正しいパスにだと思う:率直に言って、

$td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); 
$iv_size = mcrypt_enc_get_iv_size($td); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
$key = substr($keyword, 0, mcrypt_enc_get_key_size($td)); 
mcrypt_generic_init($td, $key, $iv); 
$decrypted = mdecrypt_generic($td, $data); 
$decrypted = pkcs5_unpad($decrypted); 

しかし、 、私は$ ivのcreationgと$キーワードの設定(またはおそらく$データまたは$解読されたタイプ?)ですべてを混乱させていると確信しています。次のようにpkcs5_unpad機能は次のとおりです。

function pkcs5_unpad($text) 
{ 
    $pad = ord($text{strlen($text)-1}); 
    if ($pad > strlen($text)) return false; 
    return substr($text, 0, -1 * $pad); 
} 

私はPHPで、だけでなく、暗号化技術のみならずnoobのよ...あなたは、この問題を解決するために私を助けてくださいだろうか?

+1

あなたのプロバイダはバカなのですが、他の言葉はありません。 IV(SRと呼ばれる)は決して解読のためにランダムであることはできません。キーワードが有効な秘密鍵ではありません。 DESは使用しないでください。どちらもECBエンコードを使用しないでください。 getBytesは、文字エンコーディングを指定しないと呼び出されません。そして、それは私を直接刺すものです。 –

+0

おそらくはい、Javaサンプルが動作するはずです(少なくとも彼はそう言います)。 "キーワード"は実際の秘密鍵ではありませんが、残りのコードは動作中のJavaコードであるはずです。 – deCorvett

+0

ちょっと変わって、SRはIVには使用されませんが、Cipherの任意の部分に使用されます(実際には使用されないことを意味します)。したがって、Javaコードが動作する可能性があります。 IVがECBモード内で何らかの変更を加えるのではなく、どんなものであれ。 –

答えて

0

キーが同じバイトで構成されていること(文字列が異なるようにエンコードされている可能性があります)を確認して、ゼロで埋められたIVを入力してください。 ECBモードではIVは使用されません(PHPマニュアルでも指定されています)。しかし、デフォルトにすると、すべて0になります.IVは最初のプレーンテキストブロックとXORされます。したがって、すべて0に設定されますその操作をキャンセルします。また、入力された暗号データ​​が同じであることを確認してください。最初のインスタンスではパディングを無視して、パディング前に結果が正しいかどうかを確認する必要があります。

+0

実際のキーワードは11文字です。私はすべてのゼロのあなたの提案で、運がないと試みました。私はサービスの応答で多くのシンボルを取得しているので、私はおそらく、いくつかの変換の前に解読する必要があると思う。 – deCorvett

+0

それにもよりますが、結果として何を期待していますか?あなたは私たちに語っていないので、私たちは教えてくれません。それで、私はecryptメソッドも書くことをお勧めしました...ああ、そしてafキーのDESキーの作成時に11バイトは受け入れられません。 –

関連する問題