Как хешировать временной интервал?
Мне нужно вычислить строку хеша, которая будет соответствовать любому будущему хешу "в течение прошедшего часа", начиная с этого момента.
Я по ошибке сделал:
now = datetime.now()
hash = now.strftime("%D %H")
но это просто усекает минуты, поэтому, если я скажу 4:55, через 5 минут "час" истечет.
Прошедший час необходим для того, чтобы быть частью хеширования, так как потребитель хеш-строки должен знать, был ли хеш вычислен в течение последнего часа.
2 ответа
Простое, приблизительное решение, аналогичное предложению mgibsonbr, состоит в том, чтобы сгенерировать новый токен с текущим часом, а затем, если это не удастся, проверить еще раз с прошедшим часом.
Я не думаю, что это вообще возможно. Возьмем, например, значения 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, сохраняя дату и время (или timedelta) и используя их в своих чеках.
Обновление: Кажется, я вас неправильно понял, вам нужны хеши для крипто, а не для хранения вещей в хеш-таблице для быстрого доступа... Может быть, если вы предоставите более подробную информацию о ваших потребностях, мы сможем помочь вам лучше, например, кто будет создавать хеш, кто проверим хеш, против чего и т.д.
В часе не так много минут, даже много секунд, поэтому, в принципе, вы можете просто хешировать начальное время (усеченное до ближайшей минуты / секунды) и, чтобы проверить, действителен ли хеш, взять текущее время и проверить хэши каждой минуты / секунды до этого. Наивное решение, но может стать отправной точкой для чего-то лучшего.