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; } } }