В последнее время я не думаю, что я был достаточно конкретным. Вот так:
У меня есть шестнадцатеричная строка:
742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606
Последние 20 байтов должны (теоретически) содержать SHA1 Hash первой части (полная строка – 20 байтов). Но это не соответствует мне.
Попытка сделать это с PHP, но не повезло. Вы можете получить матч?
742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a
3306295fb5f1f57ca52090d35b50060606060606
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Вот что находится в билете и как он хранится. FWIW, я могу вытащить имя пользователя и т. Д. И определить различные разделители. http://img.ruphp.com/php/AuthTicket2.jpg
Отредактировано: Я обнаружил, что строка заполняется в конце с помощью функции дешифрования, которая проходит до этой точки. Я удалил последние 6 байтов и скорректировал их с помощью билета и хэша. Все еще не работает, но я ближе.
Ваш билет вычисляется на самой шестнадцатеричной строке. Может быть, добавленный хэш рассчитывается для другого представления одних и тех же данных?
Я думаю, вы запутались в байтах против символов.
Внутри php хранит каждый символ в строке в виде байта. Хэш-файл sha1, который генерирует PHP, представляет собой 40-значное (40-байтовое) шестнадцатеричное представление 20-байтовых двоичных данных, поскольку каждое двоичное значение должно быть представлено двумя шестнадцатеричными символами.
Я не уверен, что это фактический источник вашего несоответствия, но, видя это недоразумение, я задаюсь вопросом, связано ли это.
Попытайтесь сначала обрезать строку, ее удивительно легко иметь новую строку или пространство на конце, которое полностью изменяет хэш.
Согласно этому инструменту Online SHA1 хэш данного текста (после удаления новых строк и пробелов)
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Идея: убедитесь, что ваши вводные символы не являются шестнадцатеричным числом для версии PHP.
Проблема заключалась в том, что оригинал был ключевым хешем. Мне пришлось использовать hash_hmac () вместо ключа проверки, а не sha1 ().