Две недели мучаюсь с проблемой несовместимости шифрования DES (и с другими вероятно алгоритмами такая же проблема) между dotNET и PHP.
Ну, не хочет расшифровывать PHP'шная библиотека mcrypt закодированную на dotNET информацию. Хоть убей...
В среде dotNET использую следующий класс: System.Security.Cryptography.DESCryptoServiceProvider
Меры типа *.PaddingMode = PaddingMode.Zeros и проч. для меня не подходит, т. к. само приложение dotNET написано до меня, и трогать я его не могу.
Нужно именно повторить этот алгоритм на PHP.
Весь коду не привожу — его много, все равно читать никто не будет.
Помогите, а то меня с работы уволят.

P. S. На PHP написана XML-веб служба, на .NET Framework — клиент этой веб-службы. Так вот.
Данное сообщение получено с сайта www.gotdotnet.ru
Рефлектором посмотри да и всё...
Данное сообщение получено с сайта www.gotdotnet.ru
Можно чуть по-конкретнее. Каким рефлектором?
Данное сообщение получено с сайта www.gotdotnet.ru
Тут лежит рефлектор, которым можно посмотреть исходники фреймворка и любого не обфуцированного дотнет приложения.
Данное сообщение получено с сайта www.gotdotnet.ru
Хм. Любопытная вещь. Попробую...
Ну, это правда слишком сложный путь.
Данное сообщение получено с сайта www.gotdotnet.ru
Другого, к своему глубокому сожалению, предложить не могу
Данное сообщение получено с сайта www.gotdotnet.ru
Реализуй DES самостоятельно

Mastering .NET doesn`t make you a geek. It makes you a geek worthy of a raise. (с) Jeffrey Richter
Данное сообщение получено с сайта www.gotdotnet.ru
Ага... Самостоятельно...
Аналогично идея с рефлектором.
Мне всего, то и нужно было использовать режим 'cbc' вместо 'ecb'.
Ну и, конечно ключ или вектор инициализации представленный в dotNET как:
byte[] Key = new byte[]{99, 78, 99, 78, 99, 78, 99, 78};
На PHP соответственно должен выглядить так:
$Key = chr(99).chr(78).chr(99).chr(78).chr(99).chr(78).chr(99).chr(78);
А то я его в таком виде делал: $Key = base64_decode("...");
Т. е. как массив байт, закодированный в строку Base64, что было неверно.
Не повторяйте моих ошибок...
//
// Моя реализация:
//
$desKey = chr(99).chr(78).chr(99).chr(78).chr(99).chr(78).chr(99).chr(78);
$desIV = chr(99).chr(78).chr(99).chr(78).chr(99).chr(78).chr(99).chr(78);
//
function myDecryptData($Data)
{
global $desKey, $desIV;
$td = mcrypt_module_open('des', '', 'cbc', '');
mcrypt_generic_init($td, $desKey, $desIV);
$DecData = mdecrypt_generic($td, $Data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $DecData;
}
function myEncryptData($Data)
{
global $desKey, $desIV;
$td = mcrypt_module_open('des', '', 'cbc', '');
mcrypt_generic_init($td, $desKey, $desIV);
$EncData = mcrypt_generic($td, $Data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $EncData;
}
Данное сообщение получено с сайта www.gotdotnet.ru
Дык какой задал вопрос ("Как повторить DES-шифрование") такие и ответы получил
Данное сообщение получено с сайта www.gotdotnet.ru
Здравствуйте, Megabotan, Вы писали:
M>Две недели мучаюсь с проблемой несовместимости шифрования DES (и с другими вероятно алгоритмами такая же проблема) между dotNET и PHP.
M>Ну, не хочет расшифровывать PHP'шная библиотека mcrypt закодированную на dotNET информацию. Хоть убей...
M>В среде dotNET использую следующий класс: System.Security.Cryptography.DESCryptoServiceProvider
M>Меры типа *.PaddingMode = PaddingMode.Zeros и проч. для меня не подходит, т. к. само приложение dotNET написано до меня, и трогать я его не могу.
M>Нужно именно повторить этот алгоритм на PHP.
M>Весь коду не привожу — его много, все равно читать никто не будет.
M>Помогите, а то меня с работы уволят.
M>P. S. На PHP написана XML-веб служба, на .NET Framework — клиент этой веб-службы. Так вот.
M>
Данное сообщение получено с сайта www.gotdotnet.ru
Скинь той шифратор на С#, хоть *.exe файл