您好,登錄后才能下訂單哦!
一、最近有項(xiàng)目接入了第四方支付,第四方支付提供的文檔需要兩邊進(jìn)行openssl配合私鑰、公鑰進(jìn)行RSA加密來雙方通信
二、環(huán)境說明
1、LAMP、LNMP都可以,我的環(huán)境暫時(shí)是LAMP
2、php先安裝openssl擴(kuò)展,否則使用函數(shù)會(huì)報(bào)錯(cuò),具體openssl擴(kuò)展可以去百度或者參考博客文檔
三、代碼實(shí)現(xiàn)
1、發(fā)送加密數(shù)據(jù)
<?php
//加密
//組成加密數(shù)據(jù)
$arr = array(
'name' => 'test', //第三方平臺(tái)的會(huì)員賬號(hào)
'password' => 'test', //第三方平臺(tái)的會(huì)員密碼
'amount' => '100', //轉(zhuǎn)賬金額,最低100,為100的整數(shù)倍
'order_sn' => '123456789abc', //數(shù)商交易所生成的訂單號(hào)(第三方平臺(tái)在處理完畢后需要回傳)
'sign' => '86e06157205d5155f5fdddcf077604fd', //數(shù)商交易所生成的sign(第三方平臺(tái)在處理完畢后需要回傳)
);
//先轉(zhuǎn)成json格式的數(shù)據(jù)
$arr = json_encode($arr);
//根據(jù)私鑰獲取加密字符串
$key = "私鑰內(nèi)容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($key, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
openssl_private_encrypt($arr, $data, $res);
//base64編碼
$data = base64_encode($data);
//發(fā)送POST請(qǐng)求
$to_arr = array(
'data' => $data
);
//POST請(qǐng)求忽略
2、獲取加密串解密
<?php
//解密
$data = "第四方返回的data加密串";
$key= "第四方提供的公鑰內(nèi)容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($pubKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
//解密字符串
$crypto = '';
foreach (str_split(base64_decode($data), 128) as $chunk) {
openssl_public_decrypt($chunk, $decryptData, $res);//$decryptData為解密后的數(shù)據(jù)
$crypto .= $decryptData;
}
//解析json數(shù)據(jù)得到數(shù)組
$arr = json_decode($crypto);
//打印結(jié)果
var_dump($arr);
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。