PHP通過pem文件校驗簽名異常問題解決
問題描述:
在對接第三方支付過程中,支付成功異步回調(diào)時,校驗簽名,一直無法通過。但是在支付成功時有一個同步返回也需要校驗簽名,用的是同樣的校驗方法,都沒有問題。當把回調(diào)時傳遞的參數(shù)放在postman中,手動發(fā)起回調(diào),也可以通過簽名校驗
最后經(jīng)過排查,是引用秘鑰文件時,報錯了,錯誤代碼如下
public static function verify(array $data, $sign) { if (empty($data) || empty($sign)) { return ""; } //code+msg+date+result, $code = $data['code'] ?? ''; $msg = $data['msg'] ?? ''; $date = $data['date'] ?? ''; $result = $data['result'] ?? ''; $signString = $code . $msg . $date . $result; $mallbook_key_file = __DIR__.'rsa_public.pem'; $pubKey = file_get_contents($mallbook_key_file); /** 此處可能會返回false **/ $res = openssl_get_publickey($pubKey); $result = openssl_verify($signString , base64_decode($sign), $res) === 1; openssl_free_key($res); return $result; }
上面代碼其實是沒有問題的,問題出在rsa_public.pem文件的內(nèi)容,秘鑰內(nèi)容都寫在同一行了,沒有按照標準的秘鑰格式書寫,如下
解決方法
第一種
按標準的秘鑰書寫格式修改秘鑰文件每行只能有64個字符,如下
第二種
直接在代碼中拼接秘鑰字符串
$pubKey ='MIGfMA0GCSqGSIb3DQE*************************************** ******************************************************************** ***************1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB'; $str= chunk_split($pubKey, 64, "\n"); $key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n"; $signature = base64_decode($sign); return openssl_verify($signString, $signature, $key, OPENSSL_ALGO_SHA1) === 1;
到此這篇關(guān)于PHP通過pem文件校驗簽名異常的文章就介紹到這了,更多相關(guān)php em文件校驗簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WordPress上傳圖片錯誤:不是合法的JSON響應解決辦法
這篇文章主要給大家介紹了關(guān)于WordPress上傳圖片錯誤:不是合法的JSON響應的解決辦法,WordPress提示JSON錯誤通常是由于服務器配置或插件沖突引起的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08set_exception_handler函數(shù)在ThinkPHP中的用法
這篇文章主要介紹了set_exception_handler函數(shù)在ThinkPHP中的用法,分析了官方給出了set_exception_handler函數(shù)用法說明及示例,并講述了在ThinkPHP中的應用實例,需要的朋友可以參考下2014-10-10destoon文章模塊調(diào)用企業(yè)會員資料的方法
這篇文章主要介紹了destoon文章模塊調(diào)用企業(yè)會員資料的方法,非常實用的一個技巧,需要的朋友可以參考下2014-08-08