Delphi RSA加解密

news2024/9/26 3:30:01

 感谢、感谢、感谢大佬的分享,https://github.com/ZYHPRO/RSAEncryptAndDecode

目录

1. 前言

2. 准备工作

 3. Demo注意事项说明

      3.1 公钥、私钥文本格式

      3.2 回车键的影响

      3.3 中文加解密说明

4. 结语


1. 前言

        最近工作上安排了一个项目,与工商银行之间做转账,我看其中涉及到了RSA签名加解密,由于公司写接口都用用Delphi6,老古董了,这RSA算法不好搞。

之前我也自己喜欢收集一些加密算法封装在dll,发现没有RSA这块,看来要自己来搞了。

//MD5 加密 不支持逆向解密
function dll_md5_encrypt(iLen, iUpper: integer; sIn: PWideChar; var sOut: PWideChar): Byte; stdcall;
//BASE64 加密
function dll_base64_encrypt(sIn: PWideChar; var sOut: PWideChar): Byte; stdcall;
//BASE64 解密
function dll_base64_decrypt(sIn: PWideChar; var sOut: PWideChar): Byte; stdcall;
//ECB 加密
function dll_aes_ecb_encrypt(sIn, skey: PWideChar; var sOut: PWideChar): Byte; stdcall;
//ECB 解密
function dll_aes_ecb_decrypt(sIn, skey: PWideChar; var sOut: PWideChar): Byte; stdcall;
//CBC 加密
function dll_aes_cbc_encrypt(sIn, skey, siv: PWideChar; var sOut: PWideChar): Byte; stdcall;
//CBC 解密
function dll_aes_cbc_decrypt(sIn, skey, siv: PWideChar; var sOut: PWideChar): Byte; stdcall;

2. 准备工作

        2.1 app应用公私钥一份。

        

        2.2 开发工具

        Delphi XE 10.1 Berlin 这个是我家里电脑一直安装有这个。公司没用。

        2.3. 下载源码

        这是大佬的源码 感谢分享 https://github.com/ZYHPRO/RSAEncryptAndDecode

        # RSA via OpenSSL libeay32
        delphi2010以后版本,使用openssl中的libeay32.dll
        提供基于私钥/公钥的:

        1、RSA加密解密

        2、SHA1/SHA256/SHA512摘要运算,

        3、Sha1withRSA/Sha256withRSA/Sha512withRSA签名, 其中签名可用于JWT规范

       

        我用的XE10.1版本高了,后续处理了下代码,与大家借鉴下。

 3. Demo注意事项说明

      3.1 公钥、私钥文本格式

        在RSAOpenSSL.pas单元中,TRSAOpenSSL.LoadPrivateKeyFromString方法指定了公钥、私钥的文本内容格式。

        如果公钥、密钥文件用记事本打开不是这样样子,就打开在线解析地址

RSA在线加密/在线解密 公钥加密,公钥解密,私钥加密,私钥解密 - The X 在线工具

选择RSA, 将密钥拷贝进去,然后点击其他空白地方,会自动生成内容抬头和内容结尾。然后再拷贝到密钥文件里保存就可以了。

      3.2 回车键的影响

        Unit1.pas单元117行       

        Memo的内容出现回车键,需要替换掉,不然影响加密结果(谁知道那里有个回车键...)。

aRSAData.DecryptedData := mmo_pp.Text;

        修改为

  aRSAData.DecryptedData := StringReplace(mmo_pp.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);

      3.3 中文加解密说明

        由于我用的是XE10.1,版本高。再Demo的memo里,文本内容出现汉字的话,编码格式是GBK,所以,在线解析和用Demo解析才会一致

        这又牵扯到另外一点了,像现在服务一般是Java或C#来写的,一般都是采用UTF8格式。所以修改Unit1.pas单元117行,将

aRSAData.DecryptedData := StringReplace(mmo_pp.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);

        修改为

aRSAData.DecryptedData := UTF8Encode(StringReplace(mmo_pp.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]));

4. 结语

         再次感谢大佬的分享,https://github.com/ZYHPRO/RSAEncryptAndDecode

       

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367133.html

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

相关文章

whistle+SwitchyOmega配置代理解决白名单跨越

文章目录whistleSwitchyOmega配置代理什么是whistle什么是SwitchyOmega示例:作用为什么不直接使用SwitchyOmega代理whistleSwitchyOmega配置代理 什么是whistle whistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应,也可以作为HTTP代理服务器…

数据结构-考研难点代码突破(树型查找 - 红黑树(RBT)插入流程图,删除)

文章目录1. 红黑树的定义和性质红黑树的插入操作流程红黑树的删除(了解)1. 红黑树的定义和性质 红黑树查找与删除的效率和AVL树相同。 但是因为AVL树在插入或删除节点可能破坏AVL树结构,而重新调整树的开销大。所以引出了红黑树。 红黑树的…

内网渗透(五十二)之域控安全和跨域攻击-搭建和查看域信任关系

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

为什么你的客户不喜欢用你的知识库呢?

现在很多企业的知识库处于一个完全荒废的状态,极少顾客愿意去查询使用,有的客户甚至完全停止使用企业知识库,这到底是为什么呢?看过许多公司的知识库后,总结了几个知识库失败的原因,并且提出了几个解决方法…

flink sql 执行慢问题排查(flink jdbc where 条件没有下推数据库)

最近在使用 flink sql (jdbc)执行一个简单表同步,可是执行了半天都没有执行完,后面通过 jstack 找到了问题原因:where条件没有下推到数据库执行。 任务如下: create table mysql_a ( id1 string, id2 at…

vue路由跳转取消上个页面的请求

场景描述: ​ 项目中,有一个Steps 步骤条,包含三步审核, 当页面跳转时,不管当前处于第几步,都需要停止上个页面正在执行或还未执行的逻辑。 需求:当vue路由跳转时,取消执行上个页面…

和中国信通院美图公司技术专家见面,聊聊FinOps从概念到落地

成本优化成为企业上云的核心关切。目前,许多以“上云”为数字化转型路径的企业正面临着严重的云上超支问题。 数据库软件上市公司 Couchbase 曾发布一则报告称:一个典型的企业每年在云服务的支出超过3300万美元,这个数字比企业必要的支出还多…

【类与对象】封装对象的初始化及清理

C面向对象的三大特性:封装、继承、多态。具有相同性质的对象,抽象为类。 文章目录1 封装1.1 封装的意义(一)1.2 封装的意义(二)1.3 struct 和 class区别1.4 成员属性设置为私有练习案例:1 设计…

go gin学习记录5

有了前面几节的学习,如果做个简单的web服务端已经可以完成了。 这节来做一下优化。 我们实验了3种SQL写入的方法,但是发现每一种都需要在方法中去做数据库链接的操作,有些重复了。 所以,我们把这部分提取出来,数据库链…

【C/C++】中【typedef】用法大全

总结一下typedef用法,一共七种,分别是:为基本数据类型起别名、为结构体起别名、为指针类型起别名、为数组类型起别名、为枚举类型起别名、为模版函数起别名。 目录 一、为基本数据类型起别名 二、为结构体起别名 三、为指针类型起别名 四…

Windows应用之——设置定时关机

一 概述 本文介绍window设置自动关机的两种方式: cmd指令设置自动关机任务计划程序设置自动关机第三方定时关机软件 二 cmd指令设置自动关机—不推荐 2.1 自动关机-开启(管理员模式下) 依次点击‘“开始”,在“搜索程序和文件”中输入cmd&#xff0c…

Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜

本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).tif格式栅格产品(下称“自…

关于Transformer的一些问题总结

一些与Transformer模型相关的问题总结,有不对的欢迎指出。 💡 残差网络为何可以解决梯度消失 对比1和2可以发现,对于普通网络,当有几个偏导很小的时候,梯度会迅速趋近于0;而对于残差网络,要趋近…

基于appium的app自动化测试框架

App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的 一、设备连接 (即构建基础的测试环境,保证可以驱动设备进行操作) 0.准备测试环境 1&#xff0…

第09章_MySQL子查询

第09章_子查询 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了…

Spring MVC 源码 - HandlerAdapter 组件(一)之 HandlerAdapter

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…

从零开始学typescript

https://coding.imooc.com/learn/list/412.html 公司花钱买的,我边学边做笔记 设置 vscode设置 然后下个Prettier - Code formatter 以后保存就能格式化了 下载ts npm install typescript3.6.4 -g ts版本 npm install -g ts-node8.4.1 node执行ts文件 这样&a…

_linux (TCP协议通讯流程)

文章目录TCP协议通讯流程TCP 和 UDP 对比TCP协议通讯流程 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器初始化: 调用socket, 创建文件描述符;调用bind, 将当前的文件描述符和ip/port绑定在一起;如果这个端口已经被其他进程占用了, 就会bind失 败;调用listen, 声…

FPGA入门系列15--SPI(文末有易灵思核心板及配套下载线)

文章简介 本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码…

国家推进招投标全过程电子签,契约锁帮助组织减负91%

根据某工程建设集团反馈,电子签章的应用帮助招投标工作实现:“参与方5分钟内线上实名认证;招标、中标通知等格式文件最快2分钟完成盖章;标书等大体量文件20分钟内盖章生成;专家实名认证远程评标、10分钟完成线上开标&a…