При загрузке файла на сервер хочу сделать вот такую схему.
1. PHP загрузка файла на сервер
- на сервер загружает файл, имя файла будет hash файла.
- в базу данных поступает оригинальное имя файла, расширение, hash и логин пользователя.
В моем понимании hash файла это название файла в md5. Но это вроде неправильное понимание. Как найти hash файла?
И изменяется ли hash файла, если изменить содержимое файла?
Вообще это плохой вариант так делать хранилище файлов. Ибо да, коллизии пусть и случаются редко, но всё же бывают (и на моём небольшом веку их было два-три раза (!) воочию). И два - если пользоваться сервисом будут больше двух с половиной человек нагрузка на диск будет настолько большой, что он довольно быстро раскрутиться, вылетет и убьёт кого-нибудь.
Хеш - есть результат преобразования данных произвольной длины в данные фиксированной длины.
md5 это хеш-функция, да.
В идеальном мире при изменении данных изменяется и хеш, но в хеш-функциях случаются коллизии (одинаковый хеш для разных входных данных).
@friogenn и в идеальном мире коллизии возможны, ибо функция не однозначная по определению. Суть хэша - похожесть на рандом, при небольшом изменении входных данных - случайное изменение выходных (обычно - довольно большое). Иначе архиватор сжимающий гигабайты в килобайты был реальностью.