Надежно воспроизвести на C # устаревший метод хэширования пароля, реализованный в PHP

Мы переносим приложение PHP, которое работает в Linux, в нашу новую инфраструктуру единого входа (SSO), реализованную на C # и работающую в Windows.

В рамках процесса миграции нам нужна наша инфраструктура SSO SSO, чтобы иметь возможность хэш-паролей точно так же, как и приложение PHP.

В то время как приложение PHP использует довольно разумный алгоритм хэширования паролей, в дополнение к паролю и соли строка, которая получает хеширует, к сожалению, также содержит косинус значения соли (интерпретируется как целое число) … Довольно необычное решение, midly.

Неудивительно, что вычисление косинуса большого целого числа в PHP и в C # приводит к несколько иным результатам. Это означает, что мы, вероятно, не можем достоверно переопределить алгоритм хэширования устаревших паролей в нашей новой инфраструктуре единого входа.

Одним из решений, о котором мы думали, является запуск функции хэширования PHP-пароля в AWMS Lambda и запрос Lambda из нашей инфраструктуры единого входа.

Можете ли вы подумать о других вариантах?

В другом вопросе вы пишете, что

Функция C cos(double) в простой C-программе, скомпилированной с Visual Studio 2017, дает

 c = -0.57977754519881342 

Хотя вы не говорите это прямо, похоже, что это результат, который вы ищете (он, безусловно, отличается от результата Math.Cos , не уверен, что он Math.Cos идентичен PHP).

Итак, скомпилируйте DLL с VS2017, который сделает это, и P / вызовите его. Или P / invoke cos() в библиотеке DL библиотеки времени выполнения, которая, безусловно, экспортирует все эти функции #include <math.h> .

 c:\Windows\System32>dumpbin /exports msvcr120.dll | find "cos" 1442 5A1 00081C44 acos 1443 5A2 00081F2C acosf 1444 5A3 000821B8 acosh 1445 5A4 0008227C acoshf 1446 5A5 0008233C acoshl 1472 5BF 00083ED4 cacos 1473 5C0 00084208 cacosf 1474 5C1 000844BC cacosh 1475 5C2 00084824 cacoshf 1476 5C3 00084AF4 cacoshl 1477 5C4 00084E5C cacosl 1497 5D8 00086CF4 ccos 1498 5D9 00086D70 ccosf 1499 5DA 00086EAC ccosh 1500 5DB 0008714C ccoshf 1501 5DC 000873AC ccoshl 1502 5DD 0008756C ccosl 1526 5F5 00088640 cos 1527 5F6 00088BA0 cosf 1528 5F7 000890A0 cosh 1529 5F8 00089574 coshf c:\Windows\System32>dumpbin /exports msvcrt.dll | find "cos" 1046 415 000372D0 acos 1047 416 00019BE0 acosf 1069 42C 000118F0 cos 1070 42D 00015480 cosf 1071 42E 000868F0 cosh 1072 42F 0001ABC0 coshf 

PHP будет вызывать реализацию cos из math.h glibc. Вы могли бы взглянуть на эту реализацию и воссоздать ее в своем приложении? Это может стать волосатым, поскольку математический материал glibc довольно сложный. Если бы glibc в качестве зависимости в вашем приложении был бы приемлемым, вы могли бы попробовать этот подход? Вот где я все равно начну.

Еще одна проблема для меня заключается в том, что вы на самом деле также имеете дело с некоторыми нечетными вычислениями с плавающей запятой PHP, поэтому не все «символы» алгоритма исходят только от задействованных функций триггера.