2012-03-01 6 views
0

Мне нужно вычислить строку хеша, которая будет соответствовать любому будущему хешу «в течение последнего часа», начиная с этого момента.Как хэш интервал времени?

я ошибочно сделал:

now = datetime.now() 
hash = now.strftime("%D %H") 

но просто обрезает минут, так что, если я нахожусь в 4:55 скажем, в течение 5 минут «час» вверх.

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

+1

Почему это должно быть хэш-строка? Почему бы просто не сохранить объект 'datetime' и сравнить это? – katrielalex

+0

Я думаю, вам может понравиться [этот другой вопрос] (http://stackoverflow.com/questions/9043172/hash-a-range-of-values) – inspectorG4dget

+0

@katrielalex, у меня есть токен, который действителен только в том случае, если он был построен в течение последнего часа. Если я предоставил объект datetime вместе с токеном, злоумышленник мог бы легче вычислить алгоритм хэширования. – TheOne

ответ

0

Простым приближенным решением, аналогичным предложению mgibsonbr, было бы создание нового токена с текущим часом, а затем, если это не удается, повторите проверку с прошлым часом.

1

Я не думаю, что это возможно вообще. Возьмем, к примеру, значения 4:15, 4:55, 5:30, с хэшами X, Y и Z. 4:55 находится в течение прошедшего часа как 4:55, так и 5:30, поэтому Y должен быть равен Z Однако 4:15 находится в прошлом часе 4:55, но не в 5:30, поэтому X должен быть равен Y и отличается от Z.

Лучше избегать хэшей и делать как предложено katrielalex, сохраняя datetime (или timedelta) и использовать это в ваших чеках.

Обновление: Кажется, я misundestood вас, вы хотите хэши для крипто, а не для хранения вещей в хэш-таблице для быстрого доступа ... Может быть, если вы предоставить более подробную информацию о ваших потребностях, мы можем помочь вам лучше, как кто построит хэш, который будет проверять хэш, против чего и т. д.

Существует не так много минут за час, даже много секунд, поэтому в принципе вы можете просто хешировать начальное время (усеченное до ближайшей минуты/second), и чтобы убедиться, что хеш остается в силе, возьмите текущее время и проверьте хэши каждую минуту/секунду до этого. Наивное решение, но может быть отправной точкой для чего-то лучшего.

Смежные вопросы