Вы также можете собирать индексы в словаре, где записано только первое появление каждого элемента:
from collections import OrderedDict
my_list = ['hi', 'babe', 'hi', 'babe', 'key', 'key']
d = OrderedDict()
for i, item in enumerate(my_list):
d.setdefault(item, i)
print([d[k] for k in d])
# [0, 1, 4]
A collections.OrderedDict()
используется для поддержания порядка вставки.
Для хороших зашифрованных сообщений или контрольных сумм вероятность столкновения практически невозможна.
Хорошие алгоритмы шифрования и контрольной суммы создают зашифрованные сообщения, которые неотличимы от случайности. Все, что меньше, означает, что что-то из исходного сообщения выживает. Это означает, что любой данный токен доступа с равной вероятностью сопоставляется с любым возможным зашифрованным сообщением. Все, что меньше, позволит злоумышленнику угадать сообщение.
Криптографическая стойкость HMAC зависит от криптографической стойкости лежащей в основе хеш-функции, размера ее хеш-вывода, а также размера и качества ключа.
blockquote>Хотя это не совсем нарушено, безопасность SHA-1 была значительно подорвана . Вы должны использовать SHA-256 или лучше.