Почему мой хэш SHA1 не совпадает? - PullRequest
3 голосов
/ 03 марта 2009

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

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

742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606

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

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

Билет:

742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a

sha1 хеш билета, добавленный к оригиналу:

3306295fb5f1f57ca52090d35b50060606060606

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

b6ecd613698ac3533b5f853bf22f6eb4afb94239

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

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

Ответы [ 5 ]

5 голосов
/ 03 марта 2009

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

4 голосов
/ 03 марта 2009

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

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

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

2 голосов
/ 03 марта 2009

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

1 голос
/ 09 марта 2009

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

1 голос
/ 03 марта 2009

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

b6ecd613698ac3533b5f853bf22f6eb4afb94239

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

...