Другие ответы объясняют почему, но вот как.
Учитывая случай Random
:
Random r = new Random(-229985452)
Первые 6 чисел, которые генерирует r.nextInt(27)
, являются:
8
5
12
12
15
0
и первые 6 чисел, которые генерирует r.nextInt(27)
даны Random r = new Random(-147909649)
:
23
15
18
12
4
0
Затем просто добавьте эти числа к целочисленному представлению символа `
(который равен 96):
8 + 96 = 104 --> h
5 + 96 = 101 --> e
12 + 96 = 108 --> l
12 + 96 = 108 --> l
15 + 96 = 111 --> o
23 + 96 = 119 --> w
15 + 96 = 111 --> o
18 + 96 = 114 --> r
12 + 96 = 108 --> l
4 + 96 = 100 --> d
Канонизация - это процесс, с помощью которого вы берете ввод, такой как имя файла или строку, и превращаете его в стандартное представление.
Например, если ваше веб-приложение разрешает только доступ к файлам в C: \ sites \ mydomain, то обычно любой ввод, относящийся к именам файлов, канонизируется как физический прямой путь, а не тот, который использует относительные пути. Если вы хотите открыть C: \ sites \ mydomain \ example \ example.txt, одним входом в эту функцию может быть example \ example.txt. Трудно решить, выходит ли это за пределы вашего веб-сайта, поэтому функция канонизации будет смотреть на каталог приложения и менять этот относительный путь на физический, C: \ sites \ mydomain \ example \ example.txt. Очевидно, это легче проверить, поскольку вы просто выполняете сравнение строк в начале пути к файлу.
Для входных данных HTML вы берете такие входные данные, как% 20, и канонизируете их путем некодирования, чтобы это превратилось в пробел. Это хорошая идея, поскольку существует множество различных способов кодирования, канонизация означает, что вы будете проверять только декодированную строку, а не пытаться охватить все варианты кодирования.
В основном вы вводите логически эквивалентный ввод и конвертируете их в стандартную форму, которую вы затем можете действовать.
вместо того, чтобы пытаться охватить все варианты кодирования.По сути, вы вводите логически эквивалентные данные и конвертируете их в стандартную форму, с которой вы можете действовать.
вместо того, чтобы пытаться охватить все варианты кодирования.По сути, вы вводите логически эквивалентные данные и конвертируете их в стандартную форму, с которой вы можете действовать.
Канонический (я думаю) означает, что консольный ввод является «типичным поведением». Неканонический означает, что ввод нестандартен и требует специальных знаний, таких как поведение ввода «vi» в Linux.