




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第淺談PHPSHA1withRSA加密生成簽名及驗(yàn)簽最近公司對(duì)接X(jué)X第三方支付平臺(tái)的代付業(yè)務(wù),由于對(duì)方公司只有JAVA的demo,所以只能根據(jù)文檔自己整合PHP的簽名加密,網(wǎng)上找過(guò)幾個(gè)方法,踩到各種各樣的坑,還好最后算是搞定了,話不多說(shuō),代碼分享出來(lái)。
業(yè)務(wù)要求:每個(gè)簽名組裝的內(nèi)容是按字段名的字典順序升序排序連接的
先組裝需要簽名的內(nèi)容:
*拼接需要簽名的內(nèi)容
*Author:Tao.
*@paramarray$data需簽名的字段內(nèi)容
*@returnstring
publicstaticfunctiongetSign($data)
foreach($dataas$k=$v){
$Parameters[$k]=$v;
//按字典序排序參數(shù)
ksort($Parameters);
$sign='';
foreach($Parametersas$k=$v){
$sign.=$k."=".$v."
$sign=''.rtrim($sign,'
return$sign;
}
簽名字符串如下示例:
amount=amount值ccy=ccy值merchantId=merchantId值notifyUrl=notifyUrl值orderId=orderId值payeeAcctNo=payeeAcctNo值(明文)。
要注意的是,根據(jù)業(yè)務(wù)需要選擇,是否在簽名內(nèi)容前拼接符。
然后生成秘鑰簽名:
*秘鑰加密
*Author:Tao.
*@paramstring$data之前生成好的需加密內(nèi)容
*@param$key私鑰證書(shū)位置(.pfx文件)
*@paramstring$pwd證書(shū)密碼
*@returnstring
publicstaticfunctionSHA1withRSA($data,$key,$pwd)
openssl_pkcs12_read(file_get_contents($key),$certs,$pwd);
if(!$certs)return;
$signature='';
openssl_sign($data,$signature,$certs['pkey']);
returnbin2hex($signature);
}
于第三方公司要求轉(zhuǎn)換使用16進(jìn)制,可根據(jù)需求選擇bin2hex()或base64_encode()。
這里要注意的是,根據(jù)業(yè)務(wù)需要,簽名后的內(nèi)容是否要求大小寫(xiě)敏感。
簽名后的內(nèi)容應(yīng)該是小寫(xiě)的,可以使用strtoupper()轉(zhuǎn)換成大寫(xiě)。
以上就是給大家整理好的私鑰加密方法。
但此業(yè)務(wù)中另要求將銀行卡號(hào)需要進(jìn)行RSA公鑰加密
以下是獲取公鑰的方法:
此處是獲取對(duì)方平臺(tái)證書(shū)的公鑰(.cer文件)
*獲取公鑰
*Author:Tao.
*@param$path//公鑰證書(shū)位置(.cer文件)
*@returnmixed
*@throws\Exception
publicstaticfunctionloadCert($path)
$file=file_get_contents($path);
if(!$file){
thrownew\Exception('loadx509Cert::file_get_contentsERROR');
$cert=chunk_split(base64_encode($file),64,"\n");
$cert="-----BEGINCERTIFICATE-----\n".$cert."-----ENDCERTIFICATE-----\n";
$res=openssl_pkey_get_public($cert);
$detail=openssl_pkey_get_details($res);
openssl_free_key($res);
if(!$detail){
thrownew\Exception('loadX509Cert::openssl_pkey_get_detailsERROR');
return$detail['key'];
*公鑰加密
*Author:Tao.
*@param$pubPath//公鑰證書(shū)位置(.cer文件)
*@paramstring$bankCode//銀行卡號(hào)
*@returnstring
publicstaticfunctionrsa_encode($bankCode,$pubPath)
$pubkey=self::loadCert($pubPath);
$encrypt_data='';
openssl_public_encrypt($bankCode,$encrypt_data,$pubkey);
$encrypt_data=base64_encode($encrypt_data);
return$encrypt_data;
}
你要問(wèn)我為什么私鑰是bin2hex(),公鑰換了base64_encode()。我也不知道為什么,問(wèn)過(guò)說(shuō)是16位,但是請(qǐng)求簽名一直失敗,換了64成功了。對(duì)方說(shuō)文檔太老了,忘記了。。根據(jù)需要選擇吧
最后回調(diào)結(jié)果驗(yàn)簽
首先先將回調(diào)數(shù)據(jù)中組裝簽名字段的內(nèi)容取出來(lái),按上面的getSign()方法排序。
然后進(jìn)行驗(yàn)證:
*驗(yàn)證返回的簽名是否正確
*@paramstring$data要驗(yàn)證的簽名原文
*@paramstring$signature簽名內(nèi)容
*@param$pubPath公鑰證書(shū)位置(.cer文件)
*@returnbool
publicstaticfunctionverifyRespondSign($data,$signature,$pubPath)
$keys=self::loadCert($pubPath);
$signature=hex2bin($signature);
$ok=openssl_verify($data,$signature,$keys);
i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 垃圾發(fā)電廠爐渣擴(kuò)建項(xiàng)目建議書(shū)(模板范文)
- 跨境金融保障的具體執(zhí)行方案
- 交通噪聲屏障工程實(shí)施方案
- 供水管網(wǎng)老舊設(shè)施更換工程可行性研究報(bào)告(范文參考)
- 工業(yè)園區(qū)水環(huán)境綜合整治項(xiàng)目建議書(shū)(模板范文)
- 手抄報(bào)設(shè)計(jì)教學(xué)
- 室內(nèi)設(shè)計(jì)原理講解
- 鄭州經(jīng)貿(mào)學(xué)院《高層建筑設(shè)計(jì)專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東南方職業(yè)學(xué)院《體育市場(chǎng)營(yíng)銷(xiāo)與策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安翻譯學(xué)院《外匯實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 《智能財(cái)務(wù)與經(jīng)營(yíng)分析》課程教學(xué)大綱
- 體育賽事自然災(zāi)害應(yīng)急預(yù)案
- 生命科學(xué)簡(jiǎn)史知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋中國(guó)科學(xué)技術(shù)大學(xué)
- 2024年協(xié)會(huì)工作年終總結(jié)(2篇)
- 化學(xué)教學(xué)論試卷(共7篇)
- GB/T 44591-2024農(nóng)業(yè)社會(huì)化服務(wù)社區(qū)生鮮店服務(wù)規(guī)范
- 《剪映專業(yè)版:短視頻創(chuàng)作案例教程(全彩慕課版)》 課件 第6章 創(chuàng)作生活Vlog
- 彩鋼板除銹噴漆施工方案
- 預(yù)算績(jī)效評(píng)價(jià)管理機(jī)構(gòu)入圍投標(biāo)文件(技術(shù)方案)
- 國(guó)家開(kāi)放大學(xué)(山東)《地域文化(本)》形考任務(wù)1-3+終結(jié)性考核參考答案
- 專題10平行線的性質(zhì)與判定二(計(jì)算與證明)(原卷版+解析)
評(píng)論
0/150
提交評(píng)論