2010-05-28 97 views
3

我正在使用第三方信用卡處理服務(Paybox),該服務在成功交易後通過URL中的簽名重定向回網站,作爲安全措施以防止人員操縱數據。它應該證明請求源於此服務。所以,我的成功URL看起來是這樣的:如何使用openssl驗證數字簽名

/success.php?signature=[HUGE HASH]

我不知道從哪裏開始驗證此簽名。這項服務確實提供了一個公鑰,並且我認爲我需要創建一個私鑰,但是我不知道這些。

我對linux非常好,我知道我必須運行一些openssl命令。我正在用PHP編寫驗證腳本,它也有本地openssl()函數。

如果任何人都可以用一些僞代碼甚至功能代碼來推動我朝着正確的方向發展,我會非常感激。謝謝。

回答

1

您不需要任何私鑰。簽名是使用Paybox的私鑰進行的,因此您只需要their public key,data they've signedsignature。檢查他們的文檔以查看他們簽署了哪部分數據。

PHP手冊包含openssl_verify文檔中的完整示例。

+0

...但要小心 - 加密的數據是二進制數據流,而這是一個urlencoded的值 - 而有用於改變數據的表示的標準,有標準計劃** S **用於改變表示的數據 - 你需要Paybox提供如何驗證散列的明確細節 – symcbean 2010-05-28 08:29:47

1

您可以使用openssl_verify(),下面的例子是從openssl_verify STIV @ php.net

<?php 
// $data is assumed to contain the data to be signed 

// fetch certificate from file and ready it 
$fp = fopen("path/file.pem", "r"); 
$cert = fread($fp, 8192); 
fclose($fp); 

// state whether signature is okay or not 
// use the certificate, not the public key 
$ok = openssl_verify($data, $signature, $cert); 
if ($ok == 1) { 
    echo "good"; 
} elseif ($ok == 0) { 
    echo "bad"; 
} else { 
    echo "ugly, error checking signature"; 
} 
?> 

更多信息()這裏:http://nl.php.net/openssl_verify

Paybox也有可供下載zip文件在其網站上「吃茶和樣本,以檢查數字簽名與PAYBOX SYSTEM」

http://www1.paybox.com/telechargement_focus.aspx?cat=3

5

這是我的代碼,它適用於我。希望我能幫助你。

$sign = "28E5FA795590066E8402B529DB027B8D082A226BE6E53F80D41F763207A11EF9..."; // inline signature. I'm using SHA512 
$cert = "your certification"; // ------BEGIN..... END..---- 
$data = "text"; // 64 charactor for SHA512. It's raw data, not hashed data 
$pubkeyid = openssl_pkey_get_public($cert); 
$ok = openssl_verify($data, hex2bin($sign), $pubkeyid,OPENSSL_ALGO_SHA512); 
if($ok==1) return "Verify"; else return "Unverify"; 
+1

它的工作就像一個魅力! – ChenHuang 2016-09-23 03:20:36

+0

驗證可以用哈希完成嗎?我可能沒有啓動數據,這些數據後來被散列。 – Eugene 2017-02-22 16:16:35