Вопрос

Думаю, в прошлый раз я был недостаточно конкретен.Вот так:

У меня есть шестнадцатеричная строка:

742713478FB3C36E014D004100440041004 E0041004E00000060F347D15798C9010060 6B899C5A98C9014D007900470072006F007 500700002F001467900470072006F007 500700002F001467900470072006F007 500700002F00146790047007006F007 7CA52090D35B50060606060606

Последние 20 байт должны (теоретически) содержать SHA1-хэш первой части (полная строка — 20 байт).Но мне это не подходит.

Пытался сделать это с помощью PHP, но безуспешно.Можете ли вы получить спичку?

Билет:

742713478FB3C36E014D004100 440041004E0041004E00000060 F347D15798C90100606B899C5A 98C9014D007900470072006F00 750070000000000001F76900470072006F00 750070000000000001F76790047007006F00 75007000000000000100790047007006F00 7500700000000001790047007006F00

Хэш sha1 билета добавлен к оригиналу:

3306295fb5f1f57ca52090d35b50060606060606

Мой sha1-хеш билета:

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Вот что находится в билете и как он хранится.Кстати, я могу получить имя пользователя и т. д. и определить различные разделители.http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2.JPG

Отредактировано:Я обнаружил, что строка дополняется в конце функцией дешифрования, которую она проходит до этого момента.Я удалил последние 6 байтов и соответствующим образом скорректировал их по билету и хешу.Все еще не работает, но я ближе.

Это было полезно?

Решение

Ваш билет рассчитывается на основе самой шестнадцатеричной строки.Может быть, добавленный хеш рассчитывается на основе другого представления тех же данных?

Другие советы

Я думаю, вы путаетесь в байтах и ​​символах.

Внутренне php хранит каждый символ строки как байт.Хэш sha1, который генерирует PHP, представляет собой 40-символьное (40-байтовое) шестнадцатеричное представление 20-байтовых двоичных данных, поскольку каждое двоичное значение должно быть представлено двумя шестнадцатеричными символами.

Я не уверен, что это настоящий источник вашего несоответствия, но, видя это недоразумение, я задаюсь вопросом, связано ли это с этим.

Попробуйте сначала обрезать строку: на удивление легко иметь в конце новую строку или пробел, который полностью меняет хэш.

Согласно этому Онлайн-инструмент SHA1 хэш данного текста (после удаления новых строк и пробелов) равен

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Идея:Убедитесь, что вводимые символы не являются шестнадцатеричным числом версии PHP.

Проблема заключалась в том, что оригинал представлял собой хэш с ключом.Мне пришлось использовать hash_hmac() с ключом проверки, а не sha1() без него.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top