Использование частей GUID в качестве идентификатора
-
05-07-2019 - |
Вопрос
Я разрабатываю приложение ASP.Net MVC.Одно из моих действий требует id
в качестве параметра.Например:
public actionresult Detail(Guid id){
return View();
}
Как видите, я использую Guid
вместо Int
.Вопрос скорее косметический.URL-адрес может быть очень длинным, например localhost/Detail/0c157b42-379d-41d5-b9ba-83e9df9985b2
.
Безопасно ли брать только части Guid
нравиться localhost/Detail/0c157b42
?
Решение
GUID разработан таким образом, что он должен быть уникальным, но любая его часть - нет. Подробнее читайте в этом сообщении в блоге . Если вам нужно сократить GUID, используйте хороший хеш - например, SHA-1 или (если у вас нет проблем с безопасностью) MD5.
Другие советы
Нет, это не безопасно.
Вы можете вычислить его хэш SHA-2 и взять первые несколько символов этого.
Нет, вам нужен весь GUID, поскольку существует вероятность того, что его подмножество не будет уникальным.
Например:
0c157b42-379d-41d5-b9ba-83e9df9985b2
0c157b42-379d-41d5-b9ba-83e9df9985b3
Обратите внимание: отличается только последнее число.Начало у обоих одинаковое.Вы также не можете использовать конечный конец GUID, поскольку невозможно предсказать, какая часть GUID изменится при его создании.
Некоторые другие варианты * Если существует несколько деталей с идентификаторами GUID, начинающимися с 0c157b42, укажите в URL localhost / Detail / 0c157b42 список применимых объектов деталей. * Псевдоним URL - разрешить " Дружественный URL " поле в объекте Details.
Вы можете очистить GUID -s и преобразовать HEX в Base32 (A-Z, 0-5), что сократит его до 16 символов.
Немного позднего ответа, но в случае, если кто-то прочитает это ...
в зависимости от использования вы можете указать сокращенное значение GUID.
например, если значение идентификатора сгенерировано и передано пользователю в виде значения токена аутентификации, то во время генерации вы можете просто взять как можно больше символов и сравнить его с другими используемыми значениями. если они совпадают, просто сгенерируйте новый и повторно сравните, пока он не станет уникальным.
Этот метод также рекомендуется, если вы также урезаете хеш-значение GUID ... просто для безопасности. Фактически, каждый раз, когда вы случайным образом генерируете значение для использования в качестве идентификатора, вам следует убедиться, что оно не «уже используется»