用 iv 和 PKCS7Padding 加密的 AES 256 CBC 解密字符串 (使用 Java 加密)

我是 LUA 和密码学的新手。我正在尝试在 Lua 中解密一个使用 Java 使用 AES 256 CBC 以及 IV 和 PKCS7 进行加密的字符串。 我看到了 resty.aes。但是我无法使用它解密字符串。我得到了 nil

下面是示例代码:

我在 LUA 中尝试的代码:

local aes = require "resty.aes"
local str = require "resty.string"

--- 明文数据:'hello123uvsayb1b1'
local encryptedData = '6d6b2082fb9596a4a731b43c9e6f5d63556dfa7a30dc5d7284c82dbfa43523c8'

local key = "pIyOhraBZhkELJo1DAfWabababababab"
local aes256Cbc, err = aes:new(key, nil, aes.cipher(256, "cbc"), {iv="bd7e9fdeb5d8403c"})

if(err ~= nil) then
  ngx.say("发生了一些错误")
end

local decrypted_data, err = aes256Cbc:decrypt(encryptedData)

if decrypted_data == nil then
  ngx.say("解密数据为空")
end

输出为:解密数据为空。

我无法弄清楚我在这里做错了什么。

点赞
用户9783845
用户9783845

你的加密数据是十六进制编码的。你需要将其解码为原始字节字符串:

local function fromhex(str)
    return (str:gsub('..', function (cc)
        return string.char(tonumber(cc, 16))
    end))
end

...

local encryptedData = fromhex('6d6b2082fb9596a4a731b43c9e6f5d63556dfa7a30dc5d7284c82dbfa43523c8')

...

ngx.say(decrypted_data)

返回 hello123uvsayb1b1

2020-06-06 14:51:28