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

news/2025/10/16 13:46:23/文章来源:https://www.cnblogs.com/liuxm2017/p/19145450

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.mzph.cn/news/938208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年6款主流CRM系统详解

随着数字化转型加速,越来越多的企业意识到精细化运营管理的重要性。作为连接企业与客户的核心纽带,CRM系统不仅是数据存储工具,更是驱动业务增长的战略平台。无论是初创公司还是行业巨头,选择合适的CRM都能显著提升…

动手动脑及实验性问题总结

int value=100; MyClass obj = new MyClass(); 这两种方式定义的变量不一样 当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null。 定义一个原始类型的变量时,会马上给其分配内存 对象变量不能使用使用…

华为云rds pg 11升级17

问题: 源库:zh_CN.utf8 处理货币金额: ALTER USER root SET lc_monetary TO zh_CN.utf8;

盘点2025破碎仪厂家/提供研磨处理方案的厂家

在2025年的破碎仪市场中,上海万柏生物科技有限公司凭借其创新的非接触超声波破碎仪技术,已成为样品前处理设备的行业标杆。同时,凭借其卓越的技术实力、丰富的产品线和优质的服务,成为众多用户信赖的破碎仪厂家。 …

全球顶尖的医疗器械CRM软件(深度对比)

引言:医疗器械行业的CRM特殊性 在高度监管的医疗器械行业,客户关系管理(CRM)不仅是销售工具,更是合规生命线。器械企业面临多重挑战:严格法规监管(FDA、CE、NMPA)复杂客户层级(医院、经销商、KOL、政府机构)…

uni-app x开发商城系统,tabBar

一、概述 使用uni-app x框架开发的一款多平台支持的电子商务平台。它的主要特点是一次开发,多处使用,可以同时在Android,iOS,鸿蒙next,Web,微信小程序等多个平台上运行。效果如下: 二、tabBar 如果应用是一个多…

Delphi TscGPPageControl动态创建新页面与加载Frame框架

效果展示: 核心代码:procedure TMain.scAdvancedListBox2Items0Click(Sender: TObject); //单位设置 begin//获取点击的按钮的caption属性var i := TscAdvancedListBox(Sender).ItemIndex;var cap := TscAdvancedList…

静态方法访问类的实例成员

在静态方法内部创建对象 public class Example { private String Field = "实例字段"; public void Method() { System.out.println("实例方法被调用"); } // 静态方法,内部创建对象并访问实例成…

2025年冷冻研磨仪厂家,研磨仪厂家排行,知名品牌介绍

在2025年的科技浪潮中,上海万柏生物科技有限公司(万柏生物Wonbio)凭借其卓越的技术实力和创新能力,在冷冻研磨仪领域脱颖而出,成为行业内的佼佼者。作为一家致力于样品前处理领域产品的研发、生产、销售的技术型企…

实用指南:自动化专业核心课《计算机控制技术》导览---数字时代的控制中枢

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【Linux 系统】进程优先级 - 实践

【Linux 系统】进程优先级 - 实践2025-10-16 13:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

组织研磨仪厂家品牌推荐/知名品牌,组织研磨仪哪家好?

在生命科学、医学研究、药物开发、食品安全检测等领域,样品前处理是关键环节之一,而组织研磨仪的性能直接影响实验结果的准确性与效率。随着2025年的到来,市场对高通量、高效率、高稳定性的研磨设备需求日益增长。那…

What to do if your NFO files doesnt check to 100%?

https://wiki.tlgetin.cc/doku.php/nfo_incomplete[[nfo_incomplete]] TorrentLeech.org WikiTrace: hnr start outside_seeding_with_utorrent uploaders_wanted about_clients rtorrent nfo_incompleteWhat t…

C# SerialPort send and receive full example

Install-Package System.IO.Ports; //Sender.cs using System.IO.Ports; using System.Text;namespace ConsoleApp35 {internal class Program{static async Task Main(string[] args){await SerialPortSendAsync();Co…

自监督学习在医疗AI中的科技达成路径分析(中)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

The World of Torrents (How it Works?)

https://forums.torrentleech.org/t/the-world-of-torrents-how-it-works/10189The World of Torrents (How it Works?) General discussionApr 201120d​PeterPindokoSuper User1 Apr 2011I found this somewhere an…

进口微量粘度计代理商推荐,优质供应商分享

在实验室的微观世界里,一滴液体的粘度变化可能预示着重大科学发现或技术突破。微量粘度计正是打开这扇微观世界大门的钥匙。   在现代工业研发和质控领域,对微量样品的精确粘度测量需求日益增长。无论是珍贵的生物…

进口高温高压粘度计优质供应商,粘度计代理商推荐

在地下数千米的石油储层中,在化工生产的高温反应釜里,精确的粘度测量正成为能源开发和工业生产的关键技术瓶颈。   高温高压环境下的粘度测量是能源、化工、新材料等领域的核心技术需求。常规粘度计无法在条件下正…

Apache Doris 内部数据裁剪与过滤机制的完成原理

Apache Doris 内部数据裁剪与过滤机制的完成原理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025 年循环烘箱厂家推荐榜:热风循环烘箱厂家聚焦节能智能,这家企业成多行业优选

随着制造业智能化升级,工业烘干设备作为关键生产环节的核心装备,市场需求持续攀升。2025 年工业烘箱市场规模预计保持高速增长,其中热风循环烘箱因适配性强,在食品、医药、电子等领域渗透率不断提升。但市场扩容也…