Использование частей GUID в качестве идентификатора

StackOverflow https://stackoverflow.com/questions/1801961

  •  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 ... просто для безопасности. Фактически, каждый раз, когда вы случайным образом генерируете значение для использования в качестве идентификатора, вам следует убедиться, что оно не «уже используется»

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