在lua openresty中将中间结果存储在临时变量中会导致不同的结果

我遇到了一些非常奇怪的问题,想要了解发生了什么。由于某种原因,如果我设置一个临时变量来保存中间结果,我会得到不同的结果。

我有以下代码:

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个字符,末尾有=。

可能是什么原因造成的。对于我来说,两个代码之间的结果差异非常奇怪。我已经在Mac OSX和Ubuntu 16.04 LTS上的openresty 1.15.8.2上确认了这一点。

点赞
用户2328287
用户2328287

encode_base64 函数在第二个参数中包含了一个不填充模式。因此我认为你的随机函数会返回一个真值作为第二个参数。我建议您尝试像这样调用它:ngx.encode_base64((random.bytes(32))

2020-03-06 19:46:11