Хранение промежуточного результата во временной переменной в lua openresty дает другой результат - PullRequest
1 голос
/ 04 марта 2020

Я столкнулся с чем-то очень странным и хотел бы понять, что происходит. По какой-то причине я получаю другой результат, если я установил временную переменную в 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 как на ma c os x, так и на ubuntu 16.04 lts.

1 Ответ

1 голос
/ 06 марта 2020

encode_base64 имеет второй аргумент, который не включает режим заполнения. Поэтому я думаю, что ваша случайная функция возвращает второе истинное значение. Я предлагаю просто попробовать назвать это как ngx.encode_base64((random.bytes(32))

...