如何在 Lua 中将十六进制字符串转换为 ASCII 字符串

我对 LUA 一无所知,但我正在尝试为 nginx 编写一个小脚本。

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

现在问题是,我需要将该十六进制字符串返回给期望 ASCII 字符串的解密方法。

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

fdbcc47fe5825d49ac3429d4f8408fa4b6528dd99d938f122ee7f00ab71ae0c5c73d29d4f54ea1fbefe706b5dca04f6b6c6b8b96d9807ef58eaba07c6c6cefaf6ad8673b43a4e243fb2912fb4ff93de6488c4795ebb09ecd7a40b7c9dc2003be4ff93425d2d74688208fa4d2a8d22f32490666550f4b01340de708d7aa5bc8468d171da400f59fcff4e7d371d7ab9b48fdfde29aefc0af78b2f934927a7713994c1e8f9435067c851efc5d300405c74d
点赞
用户936986
用户936986
最近为同样的原因不得不写一个。滥用 `gsub` - 捕获每两个字符并将它们替换为预先计算过的值,使用十六进制数字->字符映射。

  - 需要只做一次
     本地hex_to_char = {}
     对于idx = 0,255 do
         hex_to_char[(“%02X”):format(idx)] = string.char(idx)
         hex_to_char[(“%02x”):format(idx)] = string.char(idx)
     结束

  - 某时以后。
     str =“fdbcc47fe5825d49ac3429d4f8408fa4b6528dd99d938f122ee7f00ab71ae0c5c73d29d4f54ea1fbefe706b5dca04f6b6c6b8b96d9807ef58eaba07c6c6cefaf6ad8673b43a4e243fb2912fb4ff93de6488c4795ebb09ecd7a40b7c9dc2003be4ff93425d2d74688208fa4d2a8d22f32490666550f4b01340de708d7aa5bc8468d171da400f59fcff4e7d371d7ab9b48fdfde29aefc0af78b2f934927a7713994c1e8f9435067c851efc5d300405c74d”
     print(str:gsub(“(..)”,hex_to_char))
2016-02-26 19:41:59