аргументы для криптографических функций - PullRequest
0 голосов
/ 17 октября 2008

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

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

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

Ответы [ 3 ]

6 голосов
/ 17 октября 2008

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

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

1 голос
/ 17 октября 2008

Можно.

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

0 голосов
/ 17 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...