首页 > 解决方案 > 将中间结果存储在 lua openresty 中的临时变量中会产生不同的结果

问题描述

我遇到了一些非常奇怪的事情,想了解发生了什么。出于某种原因,如果我在 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 个字符,末尾带有 =。

这可能是什么原因造成的。我很奇怪两个代码之间的结果会有所不同。我已经确认 mac os x 和 ubuntu 16.04 lts 上的 openresty 1.15.8.2 都是这种情况。

标签: luaopenresty

解决方案


encode_base64有第二个参数,它打开无填充模式。所以我认为你的随机函数返回第二个真实值。我建议试着称之为ngx.encode_base64((random.bytes(32))


推荐阅读