Я столкнулся с чем-то очень странным и хотел бы понять, что происходит. По какой-то причине я получаю другой результат, если я устанавливаю временную переменную в lua для хранения промежуточного результата.
У меня есть следующий код:
local random = require("resty.random")
local token = ngx.encode_base64(random.bytes(32))
print("len(" .. string.len(token) .. ") " .. token) -- > len(43) OUOoBKfxLZDtE7yrHFzThF2e7dc6Wtjmzz3C6lQC67I
Он не возвращает допустимую строку base64. Символ = отсутствует, а строка состоит всего из 43 символов.
Но если я сделаю следующее, это сработает
local random = require("resty.random")
local bytes = random.bytes(32)
local token = ngx.encode_base64(bytes)
print("len(" .. string.len(token) .. ") " .. token) -- > len(44) 1E49IwlcsyfIBEwWBRXhTV2eFrc7QyYoFZ0kC1OsuTM=
Строка base64 действительна. Строка состоит из 44 символов со знаком = в конце.
Что может быть причиной этого. Мне очень странно, что результат между обоими кодами будет разным. Я подтвердил, что это так на openresty 1.15.8.2 как на mac os x, так и на ubuntu 16.04 lts.
random.bytes(32)
, становится сборщиком мусора до того, какngx.encode_base64()
(функция, написанная на C) завершится. - person Egor Skriptunoff   schedule 04.03.2020encode_base64
проблемой, так как вы генерируете случайную последовательность, и это зависит от ввода. Можете ли вы воспроизвести это с фиксированными данными? - person Darius   schedule 04.03.2020ngx.encode_base64((random.bytes(32)))
. Может быть, есть второе возвращаемое значение, а base64 создает безопасный URL-адрес b64 - person moteus   schedule 04.03.2020