представление UUID в base64 с использованием slugId из node.js - PullRequest
0 голосов
/ 05 февраля 2019

Я использую slugId, который является модулем node.js для преобразования из UUID в текст, удобный для URL base64, и наоборот.(см .: https://github.com/taskcluster/slugid) Поскольку один из наших QA выполнял тесты, он обнаружил следующее, что я не могу объяснить: слагы: aOSL2RT_Rhy-xNuoe3j7ag и aOSL2RT_Rhy-xNuoe3j7ah генерируют один и тот же UUID: d2369f6c-1eea-4518-a641-33d6c2dc0493. Это такжеприменимо к большому количеству слагов. Пример: 0jafbB7qRRimQTPWwtwEkw, 0jafbB7qRRimQTPWwtwEkx. (Оба они переводят в UUID: d2369f6c-1eea-4518-a641-33d6c2dc0493)

Функции декодирования и декодирования slugId выглядят хорошо, но я не могу объяснить вышеповедение.

1 Ответ

0 голосов
/ 12 февраля 2019

"slugId" - 22 символа.Каждый символ является base64, то есть представляет 6 битов, что означает, что они имеют в общей сложности 22 × 6 = 132 бита.Однако UUID имеют только 128 битов;последние 4 бита slugId отбрасываются при преобразовании, поэтому существует 16 значений slugId, которые сопоставляются с каждым значением UUID.

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

...