• Как добиться хорошей производительности в Sphinx?

    WolandV
    @WolandV Автор вопроса
    Сложно поспорить с этим утверждением, но я еще в исходном сообщении хотел написать, что "Предлагаю обсуждать не целесообразность решения, а теорию" (потому что у самого есть вопросы к этому решению, но интересна именно теория). То есть, подобные запросы в принципе не будут работать за тысячные доли секунды?
  • Как получить одинаковые результаты шифрования mcrypt в php и в консоли?

    WolandV
    @WolandV Автор вопроса
    Александр Карабанов: А ничем не лучше. Скорее, хуже, хотя в плане производительности вряд ли удастся выявить какую-либо разницу. Необходимость вызвана исключительно задумкой реализации, в которой необходимо выполнять шифрование как в php, так и через консоль, при этом получая одинаковый результат. На самом деле, уже найдено несколько альтернативных решений, но хочется именно данный вариант, потому что считаю его самым оптимальным, да и сил уже много потрачено + хочется матчасть изучить в деталях, а то документация не особо помогла.
  • Как получить одинаковые результаты шифрования mcrypt в php и в консоли?

    WolandV
    @WolandV Автор вопроса
    К сожалению, это было бы слишком просто, чтобы создавать вопрос, если бы такой вариант подходил )
  • Как получить одинаковые результаты шифрования mcrypt в php и в консоли?

    WolandV
    @WolandV Автор вопроса
    Александр Карабанов: Кстати, с различием результатов в mcrypt и openssl я разобрался - нашлось объяснение в стандарте: tools.ietf.org/html/rfc5652#section-6.3

    Вот пример, когда результаты будут совпадать:

    php > echo base64_encode(openssl_encrypt('1234567', 'des-ecb', 'abcd1234', true));
    Z1+D/DQlHBs=
    php > echo base64_encode(mcrypt_encrypt('des', 'abcd1234', '1234567'."\1", MCRYPT_MODE_ECB));
    Z1+D/DQlHBs=
    php > echo base64_encode(openssl_encrypt('123456', 'des-ecb', 'abcd1234', true));
    w3ERdQrOTb8=
    php > echo base64_encode(mcrypt_encrypt('des', 'abcd1234', '123456'."\2\2", MCRYPT_MODE_ECB));
    w3ERdQrOTb8=
    ...
    php > echo base64_encode(openssl_encrypt('1', 'des-ecb', 'abcd1234', true));
    +W+csq7iVao=
    php > echo base64_encode(mcrypt_encrypt('des', 'abcd1234', '1'."\7\7\7\7\7\7\7", MCRYPT_MODE_ECB));
    +W+csq7iVao=
    ...
    php > echo base64_encode(openssl_encrypt('123456789', 'des-ecb', 'abcd1234', true));
    Su2cgmLhJjFc6siuz0LoNQ==
    php > echo base64_encode(mcrypt_encrypt('des', 'abcd1234', '123456789'."\7\7\7\7\7\7\7", MCRYPT_MODE_ECB));
    Su2cgmLhJjFc6siuz0LoNQ==

    Правда, я не разобрался со случаем, когда длина шифруемой строки кратна 8 символам, но даже если бы и разобрался, это все равно не решило бы моей проблемы.

    PHP гарантированно использует ту же самую библиотеку mcrypt, которая вызывается из консоли, но результаты по-прежнему у меня не совпадают - значит вопрос только в том, какие параметры передаются через порт php в саму либу.
  • Как получить одинаковые результаты шифрования mcrypt в php и в консоли?

    WolandV
    @WolandV Автор вопроса
    То, что openssl и mcrypt выдают разные результаты - этому я объяснение нашел:

    After some research, it appears that MCrypt pads the input with zero bytes, while OpenSSL uses PKCS#7 padding, which explains the non-identical output.

    Но я совершенно не могу найти объяснения тому, что одна и та же утилита через разные порты выдает разные результаты. Ведь php всего лишь синтаксическая надстройка над тем же самым libmcrypt, который выдает результат в консоли.

    Я нашел еще одну подсказку, но не смог применить ее для получения положительного результата:

    We managed to get the same results by removing the manual padding on the PHP side

    В openssl есть опция -nopad, которая, возможно, имелась в виду в цитате выше, но в mcrypt я не вижу, как можно это настроить.
  • Как получить одинаковые результаты шифрования mcrypt в php и в консоли?

    WolandV
    @WolandV Автор вопроса
    Я сакцентировал внимание на этом моменте, потому что сам думал об этом. В любом случае, это не решение описанной проблемы. Я лишь сомневался на тему, что без переноса строки приходится дважды нажимать Ctrl+D. В общем, это нюанс, который я упомянул из каких-то сомнений, которые я не могу мотивировать, но на самом деле испробована была масса вариантов, как с переносами строки, так и без, и еще куча черт знает каких.
    Думаю, решением этой задачи можно считать указание на ошибку в описанном выше решении - все что на уровне предположений, с большой долей вероятности мной уже испробовано. К тому же, уверен, описанный сценарий воспроизведется на любом окружении с очень большой вероятностью.