Мне нужно расшифровать с помощью PHP (или Javascript) некоторые сервисные вызовы. Я потратил весь день, пытаясь это сделать, но не смог правильно расшифровать.
В качестве справки поставщик услуг прислал мне следующий пример кода расшифровки на 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 createg и $keyword (или, может быть, с типами $data или $decrypted?). Функция 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, но и в методах криптографии... не могли бы вы помочь мне решить эту проблему?