Как я правильно реализую пароли Unicode?

Добавление поддержки паролей Unicode это важная функция, которая не должна быть проигнорирована разработчиками.

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

Скажем, то, что Вы сохраните пароли как UTF-8 и ум, что этот вопрос не связан с кодировкой Unicode и он связан с нормализацией Unicode.

Теперь вопрос состоит в том, как необходимо нормализовать данные Unicode?

Необходимо быть уверены, что Вы сможете сравнить его. Необходимо быть уверены, что, когда следующий стандарт Unicode будет выпущен, он не будет делать недействительным проверку пароля.

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

1-е обновление

Действительно ли возможно реализовать это, не используя ICU, как использование ОС для нормализации?

8
задан Community 23 May 2017 в 12:14
поделиться

2 ответа

Хорошее начало - прочитать Unicode TR 15: Unicode Normalization Forms. Затем вы понимаете, что это большая работа и чревато странными ошибками - вы, вероятно, уже знаете эту часть, раз спрашиваете здесь. Наконец, вы скачиваете что-то вроде ICU и позволяете ему сделать это за вас.

IIRC, это многоступенчатый процесс. Сначала вы разлагаете последовательность до невозможности дальнейшего разложения - например, é превращается в e + ´. Затем вы переупорядочиваете последовательности в четко определенном порядке. Наконец, вы можете закодировать полученный поток байтов, используя UTF-8 или что-то подобное. Поток байтов UTF-8 можно передать в криптографический хэш-алгоритм по вашему выбору и сохранить в постоянном хранилище. Когда вы захотите проверить, совпадает ли пароль, выполните ту же процедуру и сравните результат работы хэш-алгоритма с тем, что хранится в базе данных.

6
ответ дан 5 December 2019 в 22:16
поделиться

Ответный вопрос - можете ли вы объяснить, почему вы добавили «без использования ICU»? Я вижу много вопросов, касающихся вещей, которые ICU делает (мы * думаем) довольно хорошо, но «без использования ICU». Просто любопытно.

Во-вторых, вас может заинтересовать StringPrep / NamePrep, а не просто нормализация: StringPrep - отображение строк для сравнения.

В-третьих, вас могут заинтересовать UTR # 36 и UTR # 39 для других последствий безопасности Unicode.

* (раскрытие: разработчик ICU :)

0
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: