php实现MD5withRSA签名算法

[php]  view plain  copy
  1. <?php  
  2.   
  3. class Md5RSA{  
  4.   
  5.     /** 
  6.      * 利用约定数据和私钥生成数字签名 
  7.      * @param $data 待签数据 
  8.      * @return String 返回签名 
  9.      */  
  10.     public function sign($data='')  
  11.     {  
  12.         if (empty($data))  
  13.         {  
  14.             return False;  
  15.         }  
  16.   
  17.         $private_key = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem');  
  18.         if (empty($private_key))  
  19.         {  
  20.             echo "Private Key error!";  
  21.             return False;  
  22.         }  
  23.   
  24.         $pkeyid = openssl_get_privatekey($private_key);  
  25.         if (empty($pkeyid))  
  26.         {  
  27.             echo "private key resource identifier False!";  
  28.             return False;  
  29.         }  
  30.   
  31.         $verify = openssl_sign($data$signature$pkeyid, OPENSSL_ALGO_MD5);  
  32.         openssl_free_key($pkeyid);  
  33.         return $signature;  
  34.     }  
  35.   
  36.     /** 
  37.      * 利用公钥和数字签名以及约定数据验证合法性 
  38.      * @param $data 待验证数据 
  39.      * @param $signature 数字签名 
  40.      * @return -1:error验证错误 1:correct验证成功 0:incorrect验证失败 
  41.      */  
  42.     public function isValid($data=''$signature='')  
  43.     {  
  44.         if (empty($data) || empty($signature))  
  45.         {  
  46.             return False;  
  47.         }  
  48.   
  49.         $public_key = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem');  
  50.         if (empty($public_key))  
  51.         {  
  52.             echo "Public Key error!";  
  53.             return False;  
  54.         }  
  55.   
  56.         $pkeyid = openssl_get_publickey($public_key);  
  57.         if (empty($pkeyid))  
  58.         {  
  59.             echo "public key resource identifier False!";  
  60.             return False;  
  61.         }  
  62.   
  63.         $ret = openssl_verify($data$signature$pkeyid, OPENSSL_ALGO_MD5);  
  64.         switch ($ret)  
  65.         {  
  66.             case -1:  
  67.                 echo "error";  
  68.                 break;  
  69.             default:  
  70.                 echo $ret==1 ? "correct" : "incorrect";//0:incorrect  
  71.                 break;  
  72.         }  
  73.         return $ret;  
  74.     }  
  75.   
  76. }  
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值