Здравствуйте. Не подскажите, какие есть альтернативы для функции md5_file? Стандартная функция не правильно хеширует файлы.
Цитата |
Стандартная функция не правильно хеширует файлы |
Valick, не знаю как давно, но один и тот же файл шифруется по разному на диезе и пхп. Проблема в 13 байте.
PS Может быть так, что это из-за неправильной настройки php?
DedMorozzz
4.04.2013 - 18:48
вообще есть алгоритм SHA ещё, но лучше разобрать мд5. Попробуй сделай MD5('aaa'); в мускуле, пхп и диезе(чесно говоря, не в курсе что это).
Где будет отличаться - тот и виновник
Так же открывается файл в одной и той же кодировке? Вероятно в этом проблема
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
DedMorozzz, вся суть в том, что если файл содержит 1 строчку, то все хешируется одинаково, но если более 1, то хеш расходится. Можно узнать, как в php задать нужную кодировку для открытия файла.
DedMorozzz
4.04.2013 - 19:16
Цитата |
Можно узнать, как в php задать нужную кодировку для открытия файла. |
Это я не подумав написал
Создать можно в конкретной кодировке, открыть - всегда в той, которая создана.
Цитата |
если файл содержит 1 строчку, то все хешируется одинаково |
Вывод - по разному интерпритируется перенос строки. Этот момент необходимо привести в единый вид, и после хешировать
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
DedMorozzz, понятно. В C# заменить 10 и 13 байты только на 10 у меня труда не составит. Не хотел этого делать, но похоже все же придется. Просто думал есть готовый альтерированный вариант md5_file для
php. Но все равно спасибо.
Nikitian
4.04.2013 - 21:45
Такое ощущение, что вы у файла построчно хэш считаете, что странно, т.к. функция md5_file() читает файл целиком. 10 и 3 это видимо символы конца строки и перевода каретки. Они никакого отношения не имеют к расчёту хэша. Если у вас получаются разные хэши, значит в исходном варианте разные файлы. Посмотрите файлы и сравните их. Если разницы не увидите, то выложите сюда, посмотрим вместе.
Nikitian, так он его считывает как байты же. Соответственно и все переходы на новую строку он считывает тоже. Это все относится к файлу.
Хеш приложенного файл через online-convert.com:
7df454293cb5d016e893f6ee2961506f
Хеш приложенного файла через md5_file():
d41d8cd98f00b204e9800998ecf8427e
Хеш приложенного файла средствами C#:
7df454293cb5d016e893f6ee2961506f
Nikitian
5.04.2013 - 01:05
<?php
echo md5_file(dirname(__FILE__).'/dls');
Вывод, удивительно, но как и везде ;)
7df454293cb5d016e893f6ee2961506f
Nikitian, вы правы, все правильно считает. Я до этого всегда заливал по ftp через FileZilla. Сейчас залил через ISP и все правильно схешировалось.
Спасибо за помощь.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.