ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

openresty开发lua-resty-openssl之对称加密解密 - liuxm

openresty开发lua-resty-openssl之对称加密解密 - liuxm

openresty开发lua-resty-openssl之对称加密解密

local cipher = require "resty.openssl.cipher"
local rand = require "resty.openssl.rand"
local pkey = require "resty.openssl.pkey"-- cbc需要32位密钥随机生成32位秘钥
local random_bytes = rand.bytes(32)-- 加密过程
local function aes_encrypt(data, key)-- 创建 AES-256-CBC 加密对象local c, err = cipher.new("aes-256-cbc")if not c then return nil, err end-- 生成随机 IV(AES-CBC 模式需要 16 字节 IV)local iv = rand.bytes(16)if not iv then return nil, "生成 IV 失败" end-- 初始化加密上下文local ok, err = c:init(key, iv, {is_encrypt=true}) -- true 表示加密模式if not ok then return nil, err end-- 加密数据(需处理填充)local encrypted, err = c:final(data)if not encrypted then return nil, err end-- 返回 IV + 加密后的数据(解密时需要 IV)return iv .. encrypted
end-- 解密过程
local function aes_decrypt(encrypted_data, key)-- 提取 IV(前 16 字节)local iv = encrypted_data:sub(1, 16)local data = encrypted_data:sub(17)-- 创建解密对象local c, err = cipher.new("aes-256-cbc")if not c then return nil, err end-- 初始化解密上下文local ok, err = c:init(key, iv, {is_encrypt=false}) -- false 表示解密模式if not ok then return nil, err end-- 解密数据local decrypted, err = c:final(data)if not decrypted then return nil, err endreturn decrypted
end-- 加密数据
local encode_bin = aes_encrypt("hello",random_bytes)-- 输出解密结果
ngx.say(aes_decrypt(encode_bin,random_bytes))

 

返回列表