如何在Lua

时间:2016-02-26 19:05:42

标签: string encryption nginx lua

我根本不了解LUA,而且我正试图为nginx制作一个小脚本。

我使用以下库(https://github.com/openresty/lua-resty-string)来加密某些数据。具体来说,我使用AES 256 CBC(SHA-512,盐渍)加密代码并存储十六进制编码的加密字符串,如示例所示。

现在的问题是我需要将该十六进制字符串返回到需要ASCII字符串的decrypt方法。

这是加密的十六进制字符串的示例:

fdbcc47fe5825d49ac3429d4f8408fa4b6528dd99d938f122ee7f00ab71ae0c5c73d29d4f54ea1fbefe706b5dca04f6b6c6b8b96d9807ef58eaba07c6c6cefaf6ad8673b43a4e243fb2912fb4ff93de6488c4795ebb09ecd7a40b7c9dc2003be4ff93425d2d74688208fa4d2a8d22f32490666550f4b01340de708d7aa5bc8468d171da400f59fcff4e7d371d7ab9b48fdfde29aefc0af78b2f934927a7713994c1e8f9435067c851efc5d300405c74d

1 个答案:

答案 0 :(得分:2)

最近因为同样的原因不得不写一篇。滥用gsub - 捕获每两个字符,并使用hexnumber->字符映射中的预先计算值替换它们。

-- Needs to be only done once
local hex_to_char = {}
for idx = 0, 255 do
    hex_to_char[("%02X"):format(idx)] = string.char(idx)
    hex_to_char[("%02x"):format(idx)] = string.char(idx)
end

-- Sometime later
str = "fdbcc47fe5825d49ac3429d4f8408fa4b6528dd99d938f122ee7f00ab71ae0c5c73d29d4f54ea1fbefe706b5dca04f6b6c6b8b96d9807ef58eaba07c6c6cefaf6ad8673b43a4e243fb2912fb4ff93de6488c4795ebb09ecd7a40b7c9dc2003be4ff93425d2d74688208fa4d2a8d22f32490666550f4b01340de708d7aa5bc8468d171da400f59fcff4e7d371d7ab9b48fdfde29aefc0af78b2f934927a7713994c1e8f9435067c851efc5d300405c74d"
print(str:gsub("(..)", hex_to_char))