私は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のよ...あなたは、この問題を解決するために私を助けてくださいだろうか?
あなたのプロバイダはバカなのですが、他の言葉はありません。 IV(SRと呼ばれる)は決して解読のためにランダムであることはできません。キーワードが有効な秘密鍵ではありません。 DESは使用しないでください。どちらもECBエンコードを使用しないでください。 getBytesは、文字エンコーディングを指定しないと呼び出されません。そして、それは私を直接刺すものです。 –
おそらくはい、Javaサンプルが動作するはずです(少なくとも彼はそう言います)。 "キーワード"は実際の秘密鍵ではありませんが、残りのコードは動作中のJavaコードであるはずです。 – deCorvett
ちょっと変わって、SRはIVには使用されませんが、Cipherの任意の部分に使用されます(実際には使用されないことを意味します)。したがって、Javaコードが動作する可能性があります。 IVがECBモード内で何らかの変更を加えるのではなく、どんなものであれ。 –