aes-gcm-aead.lua 这个demo无法正常运行
Closed this issue · 6 comments
第19行直接抛出错误attempt to call method 'update_aead_aad' (a nil value)
@woncc AEAD模式需要0.6.2及以上版本,可以检查一下安装的版本号
opm 安装的是0.6.0版本,的确如此,继续请教小白的问题,正在尝试做一个微信支付回调的网关,已知key, iv, aad, encrypted,但是没有tag,如何获取这个tag,demo中的tag是在加密过程中获取的。但是,目前的情况微信回调通知目前只有以上数据,我尝试使用了lua-resty-nettle处理,的确可以解密,但是解密出的json尾部多了一些乱码。
@woncc AEAD模式需要0.6.2及以上版本,可以检查一下安装的版本号
opm 安装的是0.6.0版本,的确如此,继续请教小白的问题,正在尝试做一个微信支付回调的网关,已知key, iv, aad, encrypted,但是没有tag,如何获取这个tag,demo中的tag是在加密过程中获取的。但是,目前的情况微信回调通知目前只有以上数据,我尝试使用了lua-resty-nettle处理,的确可以解密,但是解密出的json尾部多了一些乱码。
证书和回调报文解密
https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/zheng-shu-he-hui-tiao-bao-wen-jie-mi
@woncc 没有tag
的话,相当于退化成没有MAC的流加密,解密的时候不要调用final
,直接调用update
assert(cipher:init(key, iv, {
is_encrypt = false,
}))
assert(cipher:update_aead_aad(aad))
local decrypted = assert(cipher:update(encrypted))
ngx.say("decryption result: ", decrypted)
因为final/EVP_CipherFinal_ex会根据传入的tag
计算MAC,如果不匹配则解密失败
我尝试使用了lua-resty-nettle处理,的确可以解密,但是解密出的json尾部多了一些乱码
也可能是传入的密文中tag
接在了加密的消息之后,你可以试试把密文最后和乱码长度一样的字节截下来当做tag
非常感谢,实在太粗心,只看了python 的示例,php示例已经写的很清楚了,尾部16个字节就是tag,抱歉抱歉。