Php 如何使用openssl验证数字签名
我使用的是第三方信用卡处理服务(Paybox),在交易成功后,它会将URL中的签名重定向回网站,作为一种安全措施,以防止人们操纵数据。它应该证明请求来自此服务。因此,我的成功URL如下所示: /php?签名=[大哈希] 我不知道从哪里开始验证这个签名。这个服务确实提供了一个公钥,我假设我需要创建一个私钥,但除此之外我知道的不多 我对linux很在行,我知道我必须运行一些openssl命令。我正在用PHP编写验证脚本,它也有原生的openssl()函数Php 如何使用openssl验证数字签名,php,security,openssl,digital-signature,Php,Security,Openssl,Digital Signature,我使用的是第三方信用卡处理服务(Paybox),在交易成功后,它会将URL中的签名重定向回网站,作为一种安全措施,以防止人们操纵数据。它应该证明请求来自此服务。因此,我的成功URL如下所示: /php?签名=[大哈希] 我不知道从哪里开始验证这个签名。这个服务确实提供了一个公钥,我假设我需要创建一个私钥,但除此之外我知道的不多 我对linux很在行,我知道我必须运行一些openssl命令。我正在用PHP编写验证脚本,它也有原生的openssl()函数 如果有人能用一些伪代码,甚至是函数代码,把我
如果有人能用一些伪代码,甚至是函数代码,把我推向正确的方向,我将非常感激。谢谢。您不需要任何私钥。签名使用Paybox的私钥进行,因此您只需要
他们的公钥
、他们签名的数据
和签名
。检查他们的文档,查看他们已签署的数据的哪一部分
PHP手册的文档中包含一个完整的示例。您可以使用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";
}
?>
有关openssl_verify()的详细信息,请参见:
Paybox还有一个zip文件,可在其网站“使用Paybox系统检查数字签名的说明和示例”上下载
这是我的代码,对我来说很有用。希望我能帮助你
$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";
…但请注意-加密数据是一个二进制流,这是一个urlencoded值-虽然有更改数据表示形式的标准,但也有更改数据表示形式的标准-您需要Paybox提供如何验证哈希的明确细节可以使用哈希进行验证?我可能没有起始数据,这是后来散列的。