.pfx證照檔案的PHP使用——RSA驗證機制
今天公司遇到一個支付專案 對方給過來的介面使用的是RSA驗證 給到了一個.pfx的證照,頓時懵逼 馬上問Google PHP RSA怎麼玩的,結果網上都是一堆複製貼上的東西 毫無營養。都說要什麼轉成.pem的檔案形式才行,害得我搞了半天終於可以實現加密了,但是問題出現了,加密出來的字串和介面提供方給過來的加密字串示例不一樣,明顯是不通的。自己又是翻PHP幫助文件,又是瞎折騰 終於搞定了 很多支付類 銀行介面都要用這種形式的驗證 ,不多說 程式碼如下
<?php
/**
* 生成簽名前的字串
*
* @param $params
* @return string
*/
function getParamsString($params)
{
if (!is_array($params))
$params = array();
ksort($params);
$str = '';
foreach ($params as $k => $v) {
$str .= $v != ''?$k . $v:'';
}
return $str;
}
/**
* 根據原文生成簽名內容
*
* @param string $data 原文內容
*
* @return string
*/
function sign($data)
{
$filePath = 'private.pfx';
if(!file_exists($filePath)) {
return false;
}
$pkcs12 = file_get_contents($filePath);
if (openssl_pkcs12_read($pkcs12, $certs, '讀取證照所需要的密碼')) {
$privateKey = $certs['pkey']; //根據實際情況鍵值可能不同
$binary_signature = "";
if (openssl_sign(utf8_encode($data), $binarySignature, $privateKey, OPENSSL_ALGO_SHA1)) {
return bin2hex($binarySignature);
} else {
return '';
}
} else {
return '';
}
}
/**
* 驗證簽名自己生成的是否正確
*
* @param string $data 簽名的原文
* @param string $signature 簽名
*
* @return bool
*/
function verifySign($data, $signature)
{
$filePath = 'private.pfx';
if(!file_exists($filePath)) {
return false;
}
$pkcs12 = file_get_contents($filePath);
if (openssl_pkcs12_read($pkcs12, $certs, '讀取證照所需要的密碼')) {
$publicKey = $certs['cert'];
$ok = openssl_verify($data, hex2bin($signature), $publicKey);
if ($ok == 1) {
return true;
}
}
return false;
}
/**
* 驗證返回的簽名是否正確
* @filePath 為cer檔案路徑
* @param string $data 要驗證的簽名原文
* @param string $signature 簽名內容
*
* @return bool
*/
function verifyRespondSign($data, $signature)
{
$filePath = 'public.cer';
if(!file_exists($filePath)) {
return false;
}
$cert = file_get_contents($filePath);
$$pubKeyId = openssl_get_publickey($cert);
$signature = hex2bin($signature);
$ok = openssl_verify(utf8_encode($data), $signature, $pubKeyId);
if ($ok == 1) {
openssl_free_key($pubkeyid);
return true;
}
return false;
}
?>
相關文章
- 驗證碼機制之驗證碼重複使用
- PHP的HTTP認證機制PHPHTTP
- 通過OpenSSL來生成二進位制格式證書檔案(pfx和cer)
- .pfx 證書和 .cer 證書
- php驗證手機號PHP
- 驗證裡,PHP 檔案中指定自定義值PHP
- 驗證LOCK請求的FIFO機制
- 關於證書,如何使用 go 語言從 pfx 檔案中提取出私鑰Go
- Oracle服務端驗證機制Oracle服務端
- PHP 驗證身份證號碼PHP
- iOS APNS推送Java、c# P12證照和Php pem證照製作iOSJavaC#PHP
- Oracle 登入的三種驗證機制Oracle
- PHP驗證碼PHP
- Android之window機制token驗證Android
- PHP 身份證精確匹配驗證PHP
- php正則驗證手機、郵箱PHP
- Oracle基礎結構之OS驗證和口令檔案驗證Oracle
- 【證照】curl 和 java 請求報證照錯誤Java
- oracle資料檔案驗證工具Oracle
- devise使用人機驗證dev
- openssl提取pfx證書金鑰對
- ESMTP身份驗證機制探索手記 (轉)
- oracle的認證機制Oracle
- PHP中的郵箱驗證PHP
- PHP驗證碼的製作PHP
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- 從自簽名證書匯出pfx和cer證書
- mac 上使用OpenSSL 生成RSA證書Mac
- php與js方式驗證手機號碼和郵件地址的合法性,js驗證身份證號碼PHPJS
- PHP算式驗證碼和漢字驗證碼的實現方法PHP
- oracle本地驗證和密碼檔案Oracle密碼
- ca 證書機制
- PHP行為驗證碼PHP
- PHP--輸入驗證PHP
- PHP驗證碼淺析PHP
- 從驗證到不變性保護機制
- 基於 TrueLicense 的專案證書驗證
- cer pfx格式數字證書區別