Что я должен использовать как «магию» или «секрет» в URL-адресах моего изображения? - PullRequest
0 голосов
/ 04 февраля 2011

Фотографии Facebook доступны для просмотра любому человеку в мире, который знает полный URL ресурса. Каждый URL-адрес содержит идентификатор профиля, идентификатор актива фотографии, запрошенный размер и магический хеш-код для защиты от попыток грубого доступа. Что-то вроде:

/{profile-id}_{photo-id}_{magic}_{size}.jpg

Например:

http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs443.snc4/50270_68310606562_2720435_n.jpg

Flickr делает что-то похожее с их URL. Исходный URL-адрес фотографии можно создать, когда вы знаете ее идентификатор, идентификатор сервера, идентификатор фермы и секрет, как было возвращено многими методами API.

URL-адрес имеет следующий формат:

http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg

Что Facebook и Flickr используют для своего "волшебного" или "секретного" значения? Случайно сгенерированное число? Хеш изображения? Хеш профиля и изображения? Порядковый номер? Что я должен использовать?

1 Ответ

0 голосов
/ 04 февраля 2011
  • Хеш не должен быть полностью случайным числом, иначе вам нужно будет сохранить таблицу связей, связывающую каждый актив с таким числом.
  • Хеш не должен зависеть от реальных битов фотографии, иначе вам понадобится получить фотографию, чтобы пересчитать хэш, и это может быть несколько мегабайт.
  • Хеш должен зависетьна информацию, легко доступную во время создания любой страницы: идентификатор пользователя, идентификатор ресурса, возможно, идентификатор фермы.Это должно быть легко вычислимо.Но это не должно быть тривиальным, чтобы угадать.Это почти определение криптографического хэша.

Так что я бы объединил имеющиеся идентификаторы в достаточно длинную строку битов и передал бы их в MD5 или SHA1, и использовал достаточно цифр из середины в качестве секретного хэша,В качестве альтернативы, я бы объединил идентификаторы, чтобы создать, например, 64-битное значение, используя сдвиги, сложение и xor, а затем использовал бы это значение в качестве начального числа для линейного конгруэнтного генератора случайных чисел с известными параметрами для полученияхеш в несколько итераций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...