目录

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应用公私钥一份。

        

delphi des加密与java_delphi des加密与java

        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方法指定了公钥、私钥的文本内容格式。

delphi des加密与java_回车键_02

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

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

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

delphi des加密与java_Delphi RSA_03

      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解析才会一致

delphi des加密与java_回车键_04

        这又牵扯到另外一点了,像现在服务一般是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]));

delphi des加密与java_回车键_05

4. 结语

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