当前位置: 首页 > news >正文

openresty开发lua-resty-openssl之rsa公钥加密私钥解密 - liuxm

lua-resty-openssl之rsa公钥加密私钥解密

 

1.创建文件  /usr/local/openresy/rsa_test.lua

local pkey = require "resty.openssl.pkey"
local str = require "resty.string"

-- 生成密钥对
local function generate_rsa_keys()-- 生成2048位RSA密钥对local key, err = pkey.new({type = "RSA",bits = 2048})-- 提取公钥local pub_pem =  key:to_PEM("public")-- 提取私钥local priv_pem = key:to_PEM("private")if not priv_pem or not pub_pem thenreturn nil, nil, "转换 PEM 格式失败: " .. (err or "未知错误")endreturn pub_pem, priv_pem, nil
end-- 公钥加密(用于生成测试数据)
local function rsa_encrypt(pub_key, plaintext)local pkey, err = pkey.new(pub_key)if not pkey or not plaintext thenreturn nil, "参数错误"endlocal oaep_params = {oaep_md = "sha256",  -- 对应pkey.lua中的opts.oaep_mdmgf1_md = "sha256",  -- 对应pkey.lua中的opts.mgf1_mdlabel = nil}local RSA_PKCS1_OAEP_PADDING = "4"local ciphertext, err = pkey:encrypt(plaintext, RSA_PKCS1_OAEP_PADDING ,oaep_params)if not ciphertext thenreturn nil, "加密失败: " .. (err or "未知错误")end-- 返回Base64编码的密文(便于传输存储)return ngx.encode_base64(ciphertext), nil
end-- 私钥解密(核心实现)
local function rsa_decrypt(priv_key, encrypted_data)local pkey, err = pkey.new(priv_key)if not pkey or not encrypted_data thenreturn nil, "参数错误(私钥或密文为空)"end-- 1. 先解码Base64密文local ciphertext, err = ngx.decode_base64(encrypted_data)if not ciphertext thenreturn nil, "Base64解码失败: " .. (err or "无效密文")end-- 2. 设置解密填充方式(必须与加密时一致)local oaep_params = {oaep_md = "sha256",  -- 对应pkey.lua中的opts.oaep_mdmgf1_md = "sha256",  -- 对应pkey.lua中的opts.mgf1_mdlabel = nil}local RSA_PKCS1_OAEP_PADDING = "4"-- 3. 执行解密local result,err= pkey:decrypt(ciphertext, RSA_PKCS1_OAEP_PADDING,oaep_params)if not result thenreturn nil, "解密返回空结果"endreturn result, nil  -- 返回解密后的原始数据
end-- 完整测试流程
local function test_rsa_crypto()-- 1. 生成密钥对local pub_key, priv_key, err = generate_rsa_keys(2048)if err thenreturn nil, "密钥生成失败: " .. errendngx.say(pub_key)ngx.say("-----")ngx.say(priv_key)ngx.say("-----")-- 2. 原始数据local original_text = "这是一段需要加密的敏感数据:123456"ngx.say(ngx.INFO, "原始数据: ", original_text)-- 3. 公钥加密local encrypted_data, err = rsa_encrypt(pub_key, original_text)if err thenreturn nil, "加密失败: " .. errendngx.say(ngx.INFO, "加密后(Base64): ", encrypted_data)-- 4. 私钥解密local decrypted_text, err = rsa_decrypt(priv_key, encrypted_data)if err thenreturn nil, "解密失败: " .. errendngx.say(ngx.INFO, "解密后: ", decrypted_text)ngx.say(ngx.INFO, "解密后hex: ", str.to_hex(decrypted_text))-- 5. 验证结果if decrypted_text ~= original_text thenreturn nil, "解密结果不匹配原始数据"endreturn true, "加密解密验证成功"
end-- 执行测试
local success, msg = test_rsa_crypto()
if success thenngx.say("测试成功: ", msg)
elsengx.status = 500ngx.say("测试失败: ", msg)
end

2.nginx中配置

location /rsa/test {content_by_lua_file /usr/local/openresy/rsa_test.lua;      
}

3. 重新加载nginx 并访问

nginx -t 
nginx -s reloadcurl http://localhost/rsa/test

4.输出

-----BEGIN PUBLIC KEY-----
XXXXXXXXXXXXXXX
-----END PUBLIC KEY----------
-----BEGIN PRIVATE KEY-----
XXXXXXXXXXXXXXX
-----END PRIVATE KEY----------
7原始数据: 这是一段需要加密的敏感数据:123456
7加密后(Base64): l1OW/kvrWKegGUNHvYdHO4h3Zsyt7ATUFv0lHWOxAHu0ENtsbIu/4XQmr81U/ueDqMFnSQJRToka0uL4t32e6Sjb/gkh8zGY9MxvoME/hnmYCei86aYl4d+i5p4RGKnXknDmRxbAJh87xuj+jm/a7QW8nHPqNV2DSOz/S7kMlpaejwCnQqBHDs0Kv3Wsuu58eUivtmpMFhVSk08YWt/kzyPy1tgL7avo/N0QBtvS5x9++aZeqVQ92umplFU22fx47qZhfWWzRtioR/Ju73Ny4HlALpScHWOjDwuuSN0JE6X8xk29R9WSHLTFALDv52Z+4oH6OF1XiPI560g9V2VHZw==
7解密后: 这是一段需要加密的敏感数据:123456
7解密后hex: e8bf99e698afe4b880e6aeb5e99c80e8a681e58aa0e5af86e79a84e6958fe6849fe695b0e68daeefbc9a313233343536
测试成功: 加密解密验证成功

 

http://www.hskmm.com/?act=detail&tid=32290

相关文章:

  • 2025年6款主流CRM系统详解
  • 动手动脑及实验性问题总结
  • 华为云rds pg 11升级17
  • 盘点2025破碎仪厂家/提供研磨处理方案的厂家
  • 全球顶尖的医疗器械CRM软件(深度对比)
  • uni-app x开发商城系统,tabBar
  • Delphi TscGPPageControl动态创建新页面与加载Frame框架
  • 静态方法访问类的实例成员
  • 2025年冷冻研磨仪厂家,研磨仪厂家排行,知名品牌介绍
  • 组织研磨仪厂家品牌推荐/知名品牌,组织研磨仪哪家好?
  • The World of Torrents (How it Works?)
  • 进口微量粘度计代理商推荐,优质供应商分享
  • 10月16日
  • 进口高温高压粘度计优质供应商,粘度计代理商推荐
  • Apache Doris 内部数据裁剪与过滤机制的完成原理
  • 2025 年循环烘箱厂家推荐榜:热风循环烘箱厂家聚焦节能智能,这家企业成多行业优选
  • 10.16
  • 2598. 执行操作后的最大 MEX——模运算
  • 2025通风天窗厂家推荐正鑫,专业定制工业厂房通风排烟系统
  • 阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?
  • Ubuntu 上安装 PHP 环境
  • 2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!
  • 2025年石墨干燥机厂家推荐榜:真空干燥机/振动流化床干燥机/闪蒸干燥机高效环保成主流,这家企业凭实力登顶
  • 2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析
  • 混乱的置换 解题报告
  • 我42岁才顿悟:穷人的富养是带娃到处旅游,富人的富养是教会这一项本事
  • 2025年10月环保板材品牌推荐:榜单聚焦西南龙头杰家
  • Dash to Dock
  • 2025 年碳纤维布厂家 TOP 企业品牌推荐排行榜,碳纤维布 / 建筑碳纤维布 / 加固碳纤维布 / 300 克碳纤维布 / 碳纤维加固布公司推荐!
  • 2025年10月龙骨机厂家最新推荐榜,轻钢,装配式建筑,高速,全自动,吊顶,隔墙,高精度,快装式,方通龙骨龙骨机推荐这十家公司!