Вопрос

Меня немного смущает, что аргументом криптофункций является строка.Должен ли я просто обернуть нестроковые аргументы с помощью str(), например

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(игнорируйте на данный момент, что random.randbits() может быть не очень хорош с криптографической точки зрения).Редактировать:Я понимаю, что пример hmac глупый, потому что я нигде не храню ключ!

Это было полезно?

Решение

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

Редактировать:По многочисленным просьбам короткое напоминание о том, что строки Python в юникоде содержат не байты, а кодовые точки в юникоде.Каждая кодовая точка Юникода содержит множественный байты (2 или 4, в зависимости от того, как был скомпилирован интерпретатор Python).Строки Python содержат только байты.Итак, строки Python (тип str) являются типом, наиболее похожим на массив байтов.

Другие советы

Ты можешь.

Однако для HMAC вы действительно хотите где-то сохранить ключ.Без ключа у вас не будет возможности проверить хэш-значение позже.:-)

О, и Sha256 на самом деле не является криптографической функцией промышленного уровня (хотя, к сожалению, она довольно часто используется на многих сайтах).Это не реальный способ защитить пароли или другие важные данные, но более чем достаточно для генерации временных токенов

Редактировать:Как уже упоминалось, Sha256 нуждается по крайней мере в некотором количестве соли.Без соли Sha256 имеет низкий барьер для взлома с помощью словарной атаки (с учетом времени), а также существует множество таблиц Rainbow для использования.Лично я бы не стал использовать для паролей ничего меньшего, чем Blowfish (но это потому, что я параноик).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top