php - 如何使用 openssl 验证数字签名

标签 php security openssl digital-signature

我正在使用第三方信用卡处理服务 (Paybox),在交易成功后,该服务会重定向回网站并在 URL 中添加签名作为防止他人操纵数据的安全措施。它应该证明请求源自此服务。所以我的成功 URL 看起来像这样:

/success.php?signature=[大哈希]

我不知道从哪里开始验证这个签名。该服务确实提供了一个公钥,我假设我需要创建一个私钥,但除此之外我不知道太多。

我对 Linux 非常熟悉,而且我知道我必须运行一些 openssl 命令。我正在用 PHP 编写验证脚本,它也有原生的 openssl() 函数。

如果有人可以用一些伪代码甚至功能代码将我推向正确的方向,我将不胜感激。谢谢。

最佳答案

这是我的代码,对我有用。希望我能帮到你。

$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";

关于php - 如何使用 openssl 验证数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926704/

相关文章:

php - 如何用 PHP preg_replace 匹配一个字符加空格

security - 现代浏览器是否加密或以其他方式保护 IndexedDB 存储?

c++ - 在 Ubuntu 14 中编译时 SSL 握手不起作用

objective-c - 使用openssl编译报错

带有命名空间条目数组的 PHP SoapHeader

php - 如何在 centos 6 32 位中将 php 5.4.40 升级到 5.6?

php - 如何使用 php/linux 从 Lotus Domino 服务器获取 XML 格式的消息正文和附件?

php - 阻止不需要的访客 : htaccess, iptables,或者只是数据库

security - 如何限制对 OpenGrok 结果的访问?

c++ - 使用 g++ 在 linux 中进行静态编译