.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;
}
?>
相關文章
- .pfx格式證書轉.key和.crt檔案
- 驗證碼機制之驗證碼重複使用
- .pfx 證書和 .cer 證書
- jq驗證檔案
- 驗證裡,PHP 檔案中指定自定義值PHP
- java pfx 安全證書Java
- 關於證書,如何使用 go 語言從 pfx 檔案中提取出私鑰Go
- PHP 驗證身份證號碼PHP
- Android之window機制token驗證Android
- PHP驗證碼PHP
- devise使用人機驗證dev
- 【證照】curl 和 java 請求報證照錯誤Java
- java 雙向證書請求 雙向驗證機制 轉載Java
- jQuery Validate驗證上傳檔案大小jQuery
- python怎麼驗證檔案是否存在Python
- mac 上使用OpenSSL 生成RSA證書Mac
- PHP行為驗證碼PHP
- 基於 TrueLicense 的專案證書驗證
- 1.6.5.1. 準備使用密碼檔案進行身份驗證密碼
- 6.9找回機制介面安全&驗證碼token介面
- 從驗證到不變性保護機制
- ca 證書機制
- Linux基礎命令---驗證組檔案grpckLinuxRPC
- 程式設計讀寫CAD檔案驗證程式設計
- PHP實現隨機數字、字母的驗證碼功能PHP隨機
- SSL證書域名驗證重大變更:2021年12月1日起,萬用字元證書不支援檔案驗證字元
- 關於laravel上傳的檔案驗證或者的表示?Laravel
- 手機號碼驗證方法(正則驗證)
- hyperf 驗證器的使用
- php 驗證格式的函式總結PHP函式
- django-驗證碼/靜態檔案處理Django
- 1.6.5. 使用密碼檔案認證密碼
- 【加解密】使用CFSSL生成證書並使用gRPC驗證證書解密RPC
- 證書-雙證書請求檔案
- 有了證件照大師 輕鬆在ps中做證件照
- 隨機驗證碼隨機
- phpstudy apache 配置 https 證照PHPApacheHTTP
- Java驗證碼—ValidateCode的使用Java
- 自定義類載入器驗證類載入機制