php实现MD5withRSA签名算法

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

你可能感兴趣的:(算法)