Delphi有个很大的问题就是,厂商的不作为(没有封装标准的Cipher类库),让大家自己造轮子。

今天的轮子就是RSA签名,由于Delphi没有封装Cipher类库,所以只的自己写了。

因为要在Firemokey中实现RSA算法,用于手机端,心里有二个方案:

1. 实现RSA算法

2. 通过Java封装一个实现了RSA的包,通过Delphi来调用

当然结果通过了1实现,参考了网上的资源,实现方式其实就是调用SSL库来实现RSA Sign, 解决的难点在于密钥的格式,及SSL库的Delphi封装(需要引用libeay32.dll, 已经有人封装了libeay32.pas)。我自己是通过Indy的源码来实现了这个方法。

网上比较有指导性的网址:http://blog.csdn.NET/star1010/article/details/47809449, 关键代码如下

  1. function LoadPrivateKey(filename:string ): PEVP_PKEY;
  2. var
  3. bp : PBIO  ;
  4. A,pkey :PEVP_PKEY ;
  5. begin
  6. a:=nil;
  7. bp := BIO_new(BIO_s_file()) ;
  8. BIO_read_filename(bp, PChar(filename));
  9. pkey := PEM_read_bio_PrivateKey(bp, a, nil,NIL);
  10. BIO_free(bp);
  11. Result:= pkey;
  12. end;
  13. function Sign(filename,msg : String):string;
  14. var
  15. ctx : EVP_MD_CTX   ;
  16. buf_in:Pchar;
  17. m_len,outl :cardinal;
  18. pKey : PEVP_PKEY;
  19. m,buf_out:array   [0..1024]   of   char;
  20. p:array   [0..255]   of   char;
  21. i:Integer;
  22. begin
  23. buf_out:='';
  24. if filename='' then
  25. begin
  26. Result:='';
  27. Exit;
  28. end;
  29. pKey := LoadPrivateKey(filename);
  30. buf_in := PChar(msg);
  31. EVP_MD_CTX_init(@ctx);            //初始化
  32. EVP_SignInit(@ctx,EVP_sha1());    //将需要使用的摘要算法存入ctxl中
  33. EVP_SignUpdate(@ctx,buf_in,Length(buf_in));//存入编码值
  34. EVP_DigestFinal(@ctx,m,m_len);    //求取编码的长度为m_len摘要值存入m中
  35. rSA_sign(EVP_sha1()._type,m,m_len,buf_out,@outl,pkey.pkey.rsa); //64为SHA1的NID
  36. EVP_MD_CTX_cleanup(@ctx);
  37. Result:=EncodeString(StrPas(buf_out)) ;
  38. end;

如果有疑问,可以找我:13498714

http://blog.csdn.net/wingleo/article/details/52067838

http://blog.csdn.net/wingleo/article/details/52703541

支付宝RSA签名之Delphi实现的更多相关文章

  1. 支付宝RSA签名

    1.参考网上相关文章,开放php中的openssl,但使用网上例子调用openssl_pkey_new,一直报100013错误.后改用用支付宝提供的SDKdemo程序 发现使用提供的privkye,可 ...

  2. 开发支付宝支付用DELPHI实现 RSA签名

    近来根据业务需求 在ERP中集成了微信支付,支付宝支付,开发支付宝支付时最大的障碍就是RSA签名,找了很多资料,最终用 下了个libeay32.pas  根据网上资料最终解决了问题 function  ...

  3. PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  4. PHP实现RSA签名生成订单功能【支付宝示例】

    //组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的1 ...

  5. Delphi RSA签名与验签【支持SHA1WithRSA(RSA1)、SHA256WithRSA(RSA2)和MD5WithRSA签名与验签】

    作者QQ:(648437169) 点击下载➨ RSA签名与验签 [delphi RSA签名与验签]支持3种方式签名与验签(SHA1WithRSA(RSA1).SHA256WithRSA(RSA2)和M ...

  6. ThinkPHP3.2 整合支付宝RSA加密方式

    RSA核心加密验证算法 <?php /** * RSA签名 * @param $data 待签名数据 * @param $private_key 商户私钥字符串 * return 签名结果 */ ...

  7. RSA签名验签学习笔记

    RSA私钥签名时要基于某个HASH算法,比如MD5或者SHA1等.之前我一直认为签名的过程是:先对明文做HASH计算,然后用私钥直接对HASH值加密.最近才发现不是那么简单,需要对HASH后的数据进行 ...

  8. RSA签名验签

    import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import ...

  9. thinkphp整合系列之支付宝RSA加密方式

    thinkphp整合系列之支付宝RSA加密方式上篇博客写的是MD5加密方式:thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75 但是呢 ...

随机推荐

  1. NOIP模拟 run - 双向链表

    题目大意: 企鹅国正在举办全面运动会,第一项比赛就是跑步.N 个人在圆形跑道上跑步,他们都有各自的速度和起点.但这个跑步规则很奇怪,当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时候跑步 ...

  2. java-synchronized原理

    介绍 synchronized是一种独占式的重量级锁,在运行到同步方法或者同步代码块的时候,让程序的运行级别由用户态切换到内核态,把所有的线程挂起,通过操作系统的指令,去调度线程.这样会频繁出现程序运 ...

  3. java.lang.ExceptionInInitializerError异常分析

    今天在项目开发时遇到一个问题,整个项目是使用Spring等框架搭建起来的在运行项目时不报任何的异常信息,就是找不到某个类信息,各方查找该类确实是存在的,最后通过断点跟踪时在异常栈内发现java.lan ...

  4. 使用Java Service Wrapper将java程序作为linux服务并且开机自动启动

    以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest. 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/ ...

  5. List&lt;Map&lt;String, String&gt;&gt; 开启 Map&lt;String, List&lt;String&gt;&gt;

    将List变成Map结构体,下面的文字是没有水平! 写作方法传送前土壤很长一段时间.我不知道有没有好的解决办法.我们也希望提供! Map<String, String> map1 = ne ...

  6. 使用UISegementControl实现简易Tomcat程序

    // // TomViewController.m #import "TomViewController.h" #import <AVFoundation/AVFoundat ...

  7. docker入门3:基础操作(2)

    -- 容器删除 docker rm CONTAIN_ID|CONTAIN_NAME -- 镜像删除 docker rmi IMAGE_ID|IMAGE_NAME -- 进入容器 docker exec ...

  8. Codeforces 85B. Embassy Queue【段树、馋】

    标题效果: 每个人都应该申请签证必须向大使馆3种程序,而这3个步骤做的顺序是固定的.通过各种形式的手续给出多少,它需要对每个过程的处理时间,有多少人会来办理手续,什么时间来.要求的是全部人分别在大使馆 ...

  9. WPF 自定义控件的坑(蠢的:自定义控件内容不显示)

    原文:WPF 自定义控件的坑(蠢的:自定义控件内容不显示) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/detai ...

  10. either you have JavaScript disabled or your browser does not support JavaScript

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在服务器(操作系统为WindowsServer)上部署Hudson平台,使用IE访问:http://localhost ...