當前位置:首頁 » 編程語言 » php介面簽名

php介面簽名

發布時間: 2022-05-20 05:42:31

php 支付寶介面的md5簽名版本和rsa簽名版本的區別

md5 是基礎版,提示支付,查詢
rsa 為高級版,需要下載證書。提供退款功能

Ⅱ php 做app 簽名驗證怎麼做

自己寫一套加密演算法,最好用到RSA,APP端給公鑰加密數據,伺服器端PHP使用私鑰解密

Ⅲ php如何防止第三方網站私自調用網站的後端介面

一般不用擔心這個的,別人看不到你php的函數。如果非要做的話可以加
A.php:
define('Sign','123');
require_once('B.php');
B.php:
if(!defined('Sign')){
echo '非法調用';
return;
}
這個方法是B文件檢測是否A文件存在Sign常量,也可以說是簽名,有簽名才能調用,沒有簽名就輸出非法調用

Ⅳ 下面一段java的加密功能的代碼怎麼轉成PHP代碼

為什麼要轉換成PHP 你可以把 JAVA加密後的 拼接成 JSON 串 然後用PHP獲得 就可以了!~

Ⅳ 哪裡可以申請php網站發送簡訊的介面

如果你發送量不大可以找IDC服務商購買,這些手續比較簡單,找專業哪些需要企業簽約。

$loginname = ""; // 介面帳號
$pass = ""; // 介面密碼
$code = "";
$subid = "";
$sender = "";
$receivers = ""; // 接收號碼,多個號碼間用 ; 分隔
$settimer = ""; // 定時發送時間 格式:YYYY-MM-DD HH:MM
$message = urlencode("");
$cmd = "send";
$allowforward = "";
$recordid_client = ""; // 簡訊的客戶端記錄號
$http = "http://interface.37.net/interface_sms_url.ajax";
$file = $http."?loginname=".$loginname."&pass=".$pass."&code=".$code."&subid=".$subid."&sender=".$sender."&receivers=".$receivers."&settimer=".$settimer."&message=".$message."&cmd=".$cmd."&allowforward=".$allowforward."&recordid_client=".$recordid_client;
$xml = new XMLReader();
$xml->open($file);
$xml->setParserProperty(2,true);
while ($xml->read()) {
switch ($xml->name) {
case "Success": $xml->read();
$Success = $xml->value;
$xml->read();
break;
case "Fail": $xml->read();
$Fail = $xml->value;
$xml->read();
break;
case "RetCode": $xml->read();
$RetCode = $xml->value;
$xml->read();
break;
case "SmsRemain": $xml->read();
$SmsRemain = $xml->value;
$xml->read();
break;
case "ErrPhones": $xml->read();
$ErrPhones = $xml->value;
$xml->read();
break;
}
}
$xml->close();
// $Success 發送成功條數
// $Fail 發送失敗條數
// $RetCode 發送狀態值
// $SmsRemain 介面帳號余額
// $ErrPhones 發送失敗號碼。

Ⅵ php 支付寶介面官方給的md5簽名版本和rsa簽名版本的區別

雖然支付寶官方還未提供相關SDK,PHP確實可以實現RSA方式的簽名,這點其實很重要,由於不熟悉,在遇到困難的時候,經常會不由自主地想到是否PHP不支持RSA簽名,乾脆用MD5得了,這樣就沒有了前進的動力。其實說穿了MD5和RSA簽名,不同的只是簽名方式的區別,其他的都一樣,因此我這里主要說一下如何用RSA進行簽名和驗簽。
首先你需要准備下面的東西:
php的openssl擴展里已經封裝好了驗簽的方法openssl_verify。
如果在Windows下的php.ini需要開啟Openssl模塊: extension=php_openssl.dll
商戶私鑰:
即RSA私鑰,按照手冊,按以下方式生成:
openssl genrsa -out rsa_private_key.pem 1024
商戶公鑰:
即RSA私鑰,按照手冊,按以下方式生成:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成之後,按照手冊的說明,需要在簽約平台上傳公鑰,需要注意的是,上傳的時候需要把所有的注釋和換行都去掉。
另外手冊中還有如下命令:
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
該命令將RSA私鑰轉換成PKCS8格式,對於PHP來說,不需要。
支付寶公鑰:
根據手冊,在簽約平台獲得。
如果你直接復制下來的話,會得到一個字元串,需要進行下面的轉換;
1)把空格變成換行
2)添加註釋
比如你復制下來的公鑰是:
ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
TCoccYMDXEIWYTs3CwIDAQAB,那轉換之後為:
-----BEGIN PUBLIC KEY-----

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
TCoccYMDXEIWYTs3CwIDAQAB
-----END PUBLIC KEY-----
把公鑰保存在文件里。
注意這個是2048位的公鑰應該是9行或者10行,不能為1行,不然PHP的openssl_pkey_get_public無法讀取,pub_key_id的結果為false,如果沒有-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 可以自己加上,最後保存到一個rsa_public_key.pem文件中。
好了,現在已經有了所有的東西,先看簽名函數:
復制代碼
1 <?php
2 /**
3 * 簽名字元串
4 * @param $prestr 需要簽名的字元串
5 * return 簽名結果
6 */
7 function rsaSign($prestr) {
8 $public_key= file_get_contents('rsa_private_key.pem');
9 $pkeyid = openssl_get_privatekey($public_key);
10 openssl_sign($prestr, $sign, $pkeyid);
11 openssl_free_key($pkeyid);
12 $sign = base64_encode($sign);
13 return $sign;
14 }
15 ?>
復制代碼
注意點:
1.$prestr的內容和MD5一樣(參見手冊,但不包含最後的MD5密碼)
2.簽名用商戶私鑰
3.最後的簽名,需要用base64編碼
4.這個函數返回的值,就是這次請求的RSA簽名。
驗簽函數:
復制代碼
1 <?php
2 /**
3 * 驗證簽名
4 * @param $prestr 需要簽名的字元串
5 * @param $sign 簽名結果
6 * return 簽名結果
7 */
8 function rsaVerify($prestr, $sign) {
9 $sign = base64_decode($sign);
10 $public_key= file_get_contents('rsa_public_key.pem');
11 $pkeyid = openssl_get_publickey($public_key);
12 if ($pkeyid) {
13 $verify = openssl_verify($prestr, $sign, $pkeyid);
14 openssl_free_key($pkeyid);
15 }
16 if($verify == 1){
17 return true;
18 }else{
19 return false;
20 }
21 }
22 ?>
復制代碼
注意點:
1.$prestr的內容和MD5一樣(參見手冊)
2.$sign是支付寶介面返回的sign參數用base64_decode解碼之後的二進制
3.驗簽用支付寶公鑰
4.這個函數返回一個布爾值,直接告訴你,驗簽是否通過
支付寶官方提供的PHP版SDK demo中只對MD5加密方式進行了處理,但android 端和ios端 請求支付寶加密方式只能用RSA加密演算法,這時服務端PHP就無法驗證簽名了,所以需要對demo進行一些修改。
1、修改alipay_notify.class.php文件
verifyNotify 函數第46行
$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);
改成
$isSign = $this->getSignVeryfy($_POST, $_POST["sign"], $_POST["sign_type"]);
verifyReturn 函數第83行
$isSign = $this->getSignVeryfy($_GET, $_GET["sign"]);
改成
$isSign = $this->getSignVeryfy($_GET, $_GET["sign"], $_GET["sign_type"]);
getSignVeryfy 函數 116行
function getSignVeryfy($para_temp, $sign) {
改成
function getSignVeryfy($para_temp, $sign, $sign_type) {
getSignVeryfy 函數 127行
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
default :
$isSgin = false;
}
改成
switch (strtoupper(trim($sign_type))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
case "RSA" :
$isSgin = rsaVerify($prestr, $sign);
break;
default :
$isSgin = false;
}
2、新建一個alipay_rsa.function.php文件
復制代碼
1 <?php
2 /* *
3 * RSA
4 * 詳細:RSA加密
5 * 版本:3.3
6 * 日期:2014-02-20
7 * 說明:
8 * 以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
9 * 該代碼僅供學習和研究支付寶介面使用,只是提供一個參考。
10 */
11 /**
12 * 簽名字元串
13 * @param $prestr 需要簽名的字元串
14 * return 簽名結果
15 */
16 function rsaSign($prestr) {
17 $public_key= file_get_contents('rsa_private_key.pem');
18 $pkeyid = openssl_get_privatekey($public_key);
19 openssl_sign($prestr, $sign, $pkeyid);
20 openssl_free_key($pkeyid);
21 $sign = base64_encode($sign);
22 return $sign;
23 }
24 /**
25 * 驗證簽名
26 * @param $prestr 需要簽名的字元串
27 * @param $sign 簽名結果
28 * return 簽名結果
29 */
30 function rsaVerify($prestr, $sign) {
31 $sign = base64_decode($sign);
32 $public_key= file_get_contents('rsa_public_key.pem');
33 $pkeyid = openssl_get_publickey($public_key);
34 if ($pkeyid) {
35 $verify = openssl_verify($prestr, $sign, $pkeyid);
36 openssl_free_key($pkeyid);
37 }
38 if($verify == 1){
39 return true;
40 }else{
41 return false;
42 }
43 }
44 ?>

Ⅶ 請問 哪有阿里雲 簡訊服務 api 請求簽名PHP教程

官方不是有好多個demo么,不止有java的吧,多看看練練就會,你自己要具體接入項目可以參考寫一下,有些開源的程序都有插件,不想自己弄,也可以找額代接入或者指導教學,謝謝

Ⅷ php對接第四方支付介面報簽名錯誤求解一下

你這個 sign 和示例裡面的順序不一樣,比如 app_order_id 和 orderid 的順序

Ⅸ 想咨詢下php 調用中行介面: pfx文件轉為pem,用openssl_pkcs7_sign做簽名 這種方式 ,怎麼實現的,~

注意和別的語言對接的時候base64加密有差異要注意特殊字元過濾

和java對接的時候 發現java的iv欄位是byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }類型 查了好久 最後發現PHp對應的主要 字元串就OK了如下

如果java或這安卓 用的是byte類型那麼需要注意是否需要改成 "x01x02x03x04x05x06x07x08"16進制的寫法;

有的JAVA是重寫base64,des加密後需要base64下,主要注意 加密後的字元串,按照規律,從左至右,每60個字元你添加一個空格


之前寫過一篇文章 網頁鏈接

熱點內容
釘鼎伺服器出口ip 發布:2025-05-15 07:13:08 瀏覽:279
移動硬碟和光碟哪個存儲時間長 發布:2025-05-15 07:04:25 瀏覽:489
壓縮一定 發布:2025-05-15 06:57:30 瀏覽:289
進棧演算法 發布:2025-05-15 06:56:02 瀏覽:215
安卓和緩存 發布:2025-05-15 06:56:02 瀏覽:428
筆記本電腦台式伺服器 發布:2025-05-15 06:40:41 瀏覽:109
4k無壓縮 發布:2025-05-15 06:02:54 瀏覽:75
hp存儲6350 發布:2025-05-15 05:40:41 瀏覽:233
怎麼更改電腦默認緩存位置 發布:2025-05-15 05:39:01 瀏覽:877
安卓qq公孫離在哪個戰區戰力最低 發布:2025-05-15 05:38:58 瀏覽:494