Python, выбор хэш-функции - PullRequest
       7

Python, выбор хэш-функции

1 голос
/ 26 февраля 2010

Используя Python и Django, я позволю своим пользователям дарить подарки на основе pdf своим друзьям, которые упомянутый друг сможет запросить pdf, войдя на мой сайт по электронной почте.

Вот план

  1. Пользователь дает другу подарки, вводит электронную почту друзей

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

  3. Друг получает электронное письмо с указанием ссылки для скачивания в формате pdf, которая будет выглядеть как (www.mydomain.com/gift/<hash code here>)

  4. При щелчке по почтовой ссылке система проверяет, существует ли такая модель подарка с данным хеш-кодом.

  5. Если это так, загрузка начинается, иначе 404.

Это умный способ решить это? Если да, какую функцию хеширования вы бы порекомендовали? Это интересно, так как / gift / открыт для публики, и если кому-то посчастливится найти ссылку, любой может ее получить. Я планирую передать хэш-функцию по имени получателя, а также по номеру ПК модели подарка

Ответы [ 3 ]

6 голосов
/ 26 февраля 2010

Нет необходимости использовать хеш, вам просто нужен случайный токен.

  1. Создать строку случайных символов
  2. Если он уже используется (маловероятно), повторите шаг 1

Сделайте последовательность символов достаточно длинной, чтобы вы были довольны, что будет трудно догадаться

простой способ создать случайную строку - это

>>> import os
>>> os.urandom(10).encode('hex')
'3fa0c2f72ff275f48d66'
>>> os.urandom(20).encode('hex')
'ecc1143b3fc90bd99bcd609b326694f13291e3d1'
>>> os.urandom(30).encode('hex')
'd4a9a2cd7b48eca831e9805e68dd6f7db7275b654e55cdec603631a5a355'
>>> 
1 голос
/ 26 февраля 2010

UUID довольно случайны

In [13]: import uuid

In [14]: uuid.uuid4().hex
Out[14]: 'f7a7667e94574e32b3589f84ca35a98d'
0 голосов
/ 26 февраля 2010

Возможно, все будет не так, как вы хотите, но этот проект будет хорошей отправной точкой:

http://github.com/mogga/django-token-auth/

...