Daemon23RUS, Все таки секретом остается почему это не работало и меня это напрягает.
Вы сказали, что причина в неявном приведении типов, но оба хеша, что в базе, что в сравнении - бинарные, может я что-то недопонял, можете ещё раз объяснить?
Помог SUBSTRING.
Да, вы абсолютно правы, но движок большой и старый, и переписывать каждый sql запрос под prepare пока не посилу, мы даже ещё на pdo не переехали, разработка open-source.
Bind param нет, но обязательно будет, хотелось бы иметь пре-компилированные запросы ради скорости.
Я знаю, но переписывать все sql запросы это уже сложно, движок слишком большой, поэтому приходится выкручиваться пока функциями escape.
Самое интересное, как substring заработал, а LIKE нет.
Битторрент трекер - сервер, который просто отвечает списком ip адресов клиентов.
Какой именно список он узнает по отправленному хешу в GET параметре.
Эта строка пристутствует в двух форматах.
v1 (2004 год), где используется строка с хешированием sha1, и v2 (2021), где используется улучшенный по безопасности sha2.
Разработчики протокола пошли по пути обратной совместимости (коряво как по мне), так как трекеры по умолчанию на хеш больше чем 20 байтов отвечают ошибкой, программное обеспечение просто не в курсе существования v2 на 40 байтов (64 символа).
Они обрезают эту sha2 строку (64 символа до 40 символов и отправляют на трекер в бинарном виде - 20 байтов).
Т.е., я как разработчик просто не знаю v1 хеш это или v2, и мне приходится сверять их обоих в базе с полными хешами.
Я не могу обрезать хеш как здесь:
WHERE CONV(LEFT(HEX('$entered_hash'), 40), 16, 10)
Так как попросту не имею его полного значения.
Спасибо за ответ, дело в том что реализация была написана несколько лет назад (не мной), в далеком 2013ом, и ею пользуются многие, если даже отправлять новые данные в базу в виде текстового hex, то возможность находки предыдущих бинарных будет потеряна, что интересно с предыдущим sha1 такого никогда не было.
Запрос с OR мы делаем, потому что мы не знаем версию sha которая нам отправляется торрент клиентами (её просто не отличить). Sha2, которая обрезается, по длине не отличается от sha1.