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

Delphi RSA加解密

 感谢、感谢、感谢大佬的分享,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

       

        

相关文章:

Delphi RSA加解密

感谢、感谢、感谢大佬的分享,https://github.com/ZYHPRO/RSAEncryptAndDecode 目录 1. 前言 2. 准备工作 3. Demo注意事项说明 3.1 公钥、私钥文本格式 3.2 回车键的影响 3.3 中文加解密说明 4. 结语 1. 前言 最近工作上安排了一个项目,与工商银行之…...

oracle基本操作

文章目录基本操作用户权限管理:权限传递:角色管理:数据导出:对于远程数据库查看表空间查看表空间路径查看被锁的对象基本操作 connect sys/zxm as sysdba-- 用 sys用户登录 create user jsdx identified by jsdx 创建用户 jsdx 密…...

hive只复制表结构不复制表数据

目录 一、背景 二、准备测试数据 1.建表 2.造测试数据 三、操作 1.CTAS (1).无分区表测试 (2).分区表测试 2.LIKE (1).无分区表测试 (2).分区表测试 一、背景 有一张ori_…...

如何将Linux的NIC 名称更改为 eth0 而不是 enps33 或 enp0s25,只要几秒钟

概述 我们使用Linux系统,网卡名称通常都是eth0,但是有一些新的linux发行版,网卡名字 enps33 或 enp0s25。 pengubuntu:~$ ifconfig ens33 Link encap:Ethernet HWaddr 00:0c:29:fd:4d:3a inet addr:192.168.0.113 Bcast:192.168.0.…...

位运算笔记

1. 为什么要学位运算 因为这是计算机内部运算的语言,所以会非常快。 本人是因为学习算法经常遇见一些求二进制中的0和1的各种操作,好多都不知道所以特此整理一下,如有不对,烦请指正。 2. 什么是位运算 程序中的所有数在计算机内存…...

2023全国首个区块链平台发布,区块链绿色消费积分系统玩法悄然上市

全国首个区块链平台发布,区块链绿色消费积分系统玩法悄然上市 2023-02-23 16:15梦龙 大家好,我是你们熟悉而又陌生的好朋友梦龙,一个创业期的年轻人 2月22日,首届中国数字产权创新大会在成都举办。在本次大会上,全国…...

【异常】因为忘加了租户查询条件,导致重复ID导入失败Duplicate entry ‘XXX‘ for key ‘PRIMARY‘

一、异常说明 Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 670 for key PRIMARYThe error may exist in /mall/admin/mapper/GoodsCategoryMapper.java (best guess)The error may involve .admin.mapper.GoodsCate…...

证明CPU指令是乱序执行的

承接上文CPU缓存一致性原理双击QQ.exe从磁盘加载到内存里面,内存里面就会有了一个进程,进程产生的时候会产生一个主线程,就是main方法所在的线程,cpu会找到main开始的地方,把它的指令读取过来放到程序计数器&#xff0…...

css 属性和属性值的定义

文章目录css文本属性作业列表属性背景属性作业css文本属性 序号属性描述说明1font-size字体大小浏览器默认16px;2font-family字体当字体是中文字体,英文字体,中间有空格时候,要加双引号,多字体之间用逗号隔开 默认微软…...

Python获取中国大学MOOC某课程评论及其参与人数

文章目录前言一、需求二、分析三、运行结果前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 一、需求 1、课程参加人数 2、课程学员名称及其评论 二、分析 首先查看网页源代码是否有需要的数据 课程参加人数 课程学员名称及其评论 F12 打开浏…...

【C++】类和对象(完结篇)

文章目录1. 再谈构造函数1.1 初始化列表1.2 explicit关键字2. static 成员2.1 静态成员变量2.1 静态成员函数2.3 练习2.4 总结3. 匿名对象4. 友元4.1 友元函数4.2 友元类5. 内部类6. 拷贝对象时编译器的一些优化7. 再次理解类和对象这篇文章呢,我们来再来对类和对象…...

低代码开发可以解决哪些问题?

低代码开发可以解决哪些问题?如果用4句话去归纳,低代码开发可以解决以下问题—— 为企业提供更高的灵活性,用户可以突破代码的限制自主开发业务应用;通过减少对专业软件开发人员的依赖,公司可以快速响应市场上的新业务…...

Linux 中使用 docker-compose 部署 MongoDB 6 以上版本副本集及配置 SSL / TLS 协议

一、准备环境 MongoDB 副本集部署至少 3 个节点(奇数节点),为了保障数据安全性,可考虑将 MongoDB 节点分布在不同的主机上,本示例使用一台主机部署 3 个 MongoDB示例。 1、创建 MongoDB 集群数据相关目录 # 创建 Mo…...

JavaWeb--Mybatis练习

Mybatis练习Mybatis练习1 配置文件实现CRUD1.1 环境准备1.2 查询所有数据1.2.1 编写接口方法1.2.2 编写SQL语句1.2.3 编写测试方法1.2.4 起别名解决上述问题1.2.5 使用resultMap解决上述问题1.2.6 小结1.3 查询详情1.3.1 编写接口方法1.3.2 编写SQL语句1.3.3 编写测试方法1.3.4…...

Springer-MTA期刊上传Latex要求

https://blog.csdn.net/qq_40721108/article/details/129000957本文简述比较全面Please provide any additional items.If your data are available online, for example in a repository, you can add a weblink using the “Link(s) to supporting data” option from the dr…...

Graph Embedding基础 图表示学习 什么是Graph Embedding

本文包括 DeepWalk LINE SDNE Node2vec Struc2vec等几个重要的Graph Embedding 方法 先说下不同embedding的区别是什么: DeepWalk:采用随机游走,形成序列,采用skip-gram方式生成节点embedding。node2vec:不同的随机游…...

某直聘tp_token解析

尊重版权,请勿盗版,不放代码。截至2023-02-23更新---------------------------------------检测windows属性总数大于150 改成大于15 > 150检测了document属性大于50检测了navigate属性检测了navigate.plugins 属性值检测moudle nodejs是否存在&#x…...

替代启攀微8按键触控八通道触摸芯片-GTC08L

能完美替代启攀微8按键触控八通道电触摸芯片-GTC08L芯片是一款非常适用于音响上超稳定超抗干扰低功耗八通道电容式触摸IC;可通过触摸实现各种逻辑功能控制;操作简单、方便实用;电压范围宽,可在2.7V~5.5V(单…...

Zabbix“专家坐诊”第182期问答汇总

问题一: Q:像烽火、浪潮这种没有ilo的设备怎么监控他们的硬件状态呢? A:如果没有ilo,可以使用其他硬件监控软件,例如HP Insight Manager、IBM Director、Dell OpenManage等。这些软件可以帮助您监控硬件状…...

PHP、Nginx、openssl ECC证书搭建

在一台Ubuntu中#!/bin/bash# 安装 Nginxsudo apt-get updatesudo apt-get install nginxsudo apt-get install libssl-devsudo apt-get install -y nginx# 配置 Nginxsudo ufw allow Nginx HTTPsudo systemctl start nginxsudo systemctl enable nginx# 安装 PHPsudo apt-get i…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 ​​摘要:​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...