2016-02-26 2 views
1

У меня нет никаких знаний о LUA, и я пытаюсь создать небольшой скрипт для nginx.Как преобразовать шестнадцатеричную строку в строку ascii в Lua

Я использую следующую библиотеку (https://github.com/openresty/lua-resty-string) для шифрования некоторых данных. В частности, я использую код для шифрования AES 256 CBC (SHA-512, соленое) и хранения зашифрованной строки с шестнадцатеричным кодированием, как показано в примере.

Проблема в том, что мне нужно вернуть эту шестнадцатеричную строку в метод дешифрования, который ожидает строку ASCII.

Это пример зашифрованного шестнадцатеричной строки:

fdbcc47fe5825d49ac3429d4f8408fa4b6528dd99d938f122ee7f00ab71ae0c5c73d29d4f54ea1fbefe706b5dca04f6b6c6b8b96d9807ef58eaba07c6c6cefaf6ad8673b43a4e243fb2912fb4ff93de6488c4795ebb09ecd7a40b7c9dc2003be4ff93425d2d74688208fa4d2a8d22f32490666550f4b01340de708d7aa5bc8468d171da400f59fcff4e7d371d7ab9b48fdfde29aefc0af78b2f934927a7713994c1e8f9435067c851efc5d300405c74d 
+0

Как вы конвертируете в шестнадцатеричный? – warspyking

ответ

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)) 
+3

Почему бы не просто 'str: gsub ('% x% x', function (c) return c.char (tonumber (c, 16)) end)'? –

+0

@Egor Почему бы не просто '' 'str: gsub ('% x% x', string.char (tonumber ('% 1', 16)))' ''? – warspyking

+1

@warspyking Это не работает. –

Смежные вопросы