大佬们,我这边数据是通过java 加密的, 可以参考
https://github.com/patrickfav/armadillo/blob/master/armadillo/src/main/java/at/favre/lib/armadillo/AesGcmEncryption.java 链接里encrypt 方法,然后post
post 到服务端,我拿到里面 iv 和encrypted的值, 我想问下怎么用lua解密这个aes呢?试了https://github.com/openresty/lua-resty-string/blob/master/t/aes.t 测试里的gcm 模式是否都无法解密,报EVP_DecryptFinal_ex failed 。
我的代码:
`local aes_default = aes:new("xxxxxxxxxxxxx",nil, aes.cipher(128,"gcm"), nil, nil ,12)

local decrypted, err = aes_default:decryp(encrypt, iv)`

    试试
    local aes_default = aes:new("xxxxxxxxxxxxx",nil, aes.cipher(128,"gcm"), {iv=iv})
    local decrypted, err = aes_default:decrypt(encrypt)

      谢谢回复,尝试后仍然返回的 EVP_DecryptFinal_ex failed

      key: 123456789abcdefg
      data = "{name:123}"

      java 加密后base64数据:"G9NZGs9jwPIvSVGXpJ/KKh6l23AR/6Ws2L4=";
      iv做base64获取到值: "+xbxp1L1omX8vYkd";

      lua 解密后任然有EVP_DecryptFinal_ex failed
      local data = "G9NZGs9jwPIvSVGXpJ/KKh6l23AR/6Ws2L4="
      local vi = "+xbxp1L1omX8vYkd"
      local data_base64 = ngx.decode_base64(data)
      local iv_base64 = ngx.decode_base64(vi)
      local aes_default = aes:new("123456789abcdefg", nil, aes.cipher(128,"gcm"), {iv=iv_base64})
      local decrypted, err = aes_default:decrypt(data_base64, iv_base64)


        local aes = require "resty.aes"
        local data = "G9NZGs9jwPIvSVGXpJ/KKh6l23AR/6Ws2L4="
        local vi = "+xbxp1L1omX8vYkd"
        local data_base64 = ngx.decode_base64(data)
        local iv_base64 = ngx.decode_base64(vi)
        local aes_default = aes:new("123456789abcdefg", nil, aes.cipher(128,"gcm"), {iv=iv_base64})
        local decrypted, err = aes_default:decrypt(data_base64:sub(1, -17), data_base64:sub(-16, -1))
        
        ngx.say(decrypted)

        加密的数据后16位是tag数据,也就是要拆成两部分作为参数传入。

        谢谢大佬,尝试后能解出来了, 对这个加密算法不是很熟, 幸苦解释。

          Write a Reply...