| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace LdzfPay\Api\Common;
- use LdzfPay\Api\Common\Logger;
- use LdzfPay\UmfPayService\UmfService;
- use think\Config;
- /**
- * 数据签名,验签处理工具类
- */
- Class SignUtil{
- /**
- * @param $plain string 签名明文串
- * @param $priv_key_file string 私钥地址
- * @return bool|string 签名base64编码后的字符串
- */
- public static function sign($plain, $priv_key_file){
- // $log = new Logger();
- try{
- // $log->logInfo("[UMF SDK]私钥文件绝对路径 ".$priv_key_file);
- if(!file_exists($priv_key_file)){
- // $log->logInfo("[UMF SDK]传入的私钥文件不存在,私钥文件绝对路径 ".$priv_key_file);
- die("[UMF SDK]传入的私钥文件不存在,私钥文件绝对路径 ".$priv_key_file);
- }
- $fp = fopen($priv_key_file,"rb");
- $priv_key = fread($fp, 8192);
- @fclose($fp);
- $pkeyid = openssl_get_privatekey($priv_key);
- if(!is_resource($pkeyid)){ return FALSE;}
- // compute signature
- @openssl_sign($plain, $signature, $pkeyid);
- // free the key from memory
- @openssl_free_key($pkeyid);
- // $log->logInfo("[UMF SDK]签名前明文 " .$plain);
- // $log->logInfo("[UMF SDK]签名后密文 " .base64_encode($signature));
- return base64_encode($signature);
- }catch(Exception $e){
- die("[UMF SDK]签名失败".$e->getMessage());
- }
- }
- /**
- * @param $plain string 签名明文串
- * @param $priv_key_file string 私钥地址
- * @return bool|string 签名base64编码后的字符串
- */
- public static function sign256($plain, $priv_key_file){
- $log = new Logger();
- try{
- $log->logInfo("[UMF SDK]私钥文件绝对路径 ".$priv_key_file);
- if(!file_exists($priv_key_file)){
- $log->logInfo("[UMF SDK]传入的私钥文件不存在,私钥文件绝对路径 ".$priv_key_file);
- die("[UMF SDK]传入的私钥文件不存在,私钥文件绝对路径 ".$priv_key_file);
- }
- $fp = fopen($priv_key_file,"rb");
- $priv_key = fread($fp, 8192);
- @fclose($fp);
- $pkeyid = openssl_get_privatekey($priv_key);
- if(!is_resource($pkeyid)){ return FALSE;}
- // compute signature
- @openssl_sign($plain, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
- // free the key from memory
- @openssl_free_key($pkeyid);
- //$log->logInfo("[UMF SDK]签名前明文 " .$plain);
- $log->logInfo("[UMF SDK]签名后密文 " .base64_encode($signature));
- return base64_encode($signature);
- }catch(Exception $e){
- die("[UMF SDK]签名失败".$e->getMessage());
- }
- }
- /**
- * @param $plain string 验签明文
- * @param $signature string 验签密文
- * @return bool 验签结果
- */
- public static function verify($plain,$signature){
- //$cert_file = UmfService::$publicKeyPath;
- // $log = new Logger();
- // //$log->logInfo("[UMF SDK]公钥文件绝对路径 ".$cert_file);
- // //if(!file_exists($cert_file)){
- // // $log->logInfo("[UMF SDK]传入的公钥文件不存在,公钥文件绝对路径 ".$cert_file);
- // // die("[UMF SDK]传入的公钥文件不存在,公钥文件绝对路径 ".$cert_file);
- // //}
- //
- // $log->logInfo("[UMF SDK]异步通知验签明文 ".$plain);
- // $log->logInfo("[UMF SDK]异步通知验签密文 ".$signature);
- $signature = base64_decode($signature);
- $cert_file = Config::get('ldys_pay')['public_file'];
- $fp = fopen($cert_file, "r");
- $cert = fread($fp, 8192);
- fclose($fp);
- $pubkeyid = openssl_get_publickey($cert);
- if (!is_resource($pubkeyid)) {
- return FALSE;
- }
- $ok = openssl_verify($plain, $signature, $pubkeyid);
- @openssl_free_key($pubkeyid);
- if ($ok == 1) {
- // $log->logInfo("[UMF SDK]验签成功");
- return true;
- } elseif ($ok == 0) {
- // $log->logInfo("[UMF SDK]验签失败");
- return false;
- } else {
- // $log->logInfo("[UMF SDK]验签失败");
- return false;
- }
- }
- public static function verify256($plain,$signature){
- $log = new Logger();
- $signature = base64_decode($signature);
- $cert_file = Config::get('ldys_pay')['public_file'];
- $fp = fopen($cert_file,"r");
- $cert = fread($fp, 8192);
- fclose($fp);
- $pubkeyid = openssl_get_publickey($cert);
- if(!is_resource($pubkeyid)){return FALSE;}
- $ok = openssl_verify($plain,$signature,$pubkeyid,OPENSSL_ALGO_SHA256);
- @openssl_free_key($pubkeyid);
- if ($ok == 1) {
- $log->logInfo("[UMF SDK]验签成功");
- return true;
- } elseif ($ok == 0) {
- $log->logInfo("[UMF SDK]验签失败");
- return false;
- } else {
- $log->logInfo("[UMF SDK]验签失败");
- return false;
- }
- }
- }
|