【问题标题】:How to verify a digital signature with openssl如何使用 openssl 验证数字签名
【发布时间】:2010-05-28 04:49:38
【问题描述】:

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

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

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

我很擅长 linux,而且我知道我必须运行一些 openssl 命令。我正在用 PHP 编写验证脚本,它也有原生的 openssl() 函数。

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

【问题讨论】:

    标签: php security openssl digital-signature


    【解决方案1】:

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

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

    【讨论】:

    • 可以用hash验证吗?我可能没有起始数据,后来被散列了。
    【解决方案2】:

    您不需要任何私钥。签名是使用 Paybox 的私钥进行的,因此您只需要 their public keydata they've signedsignature。检查他们的文档以查看他们已签署的数据的哪一部分。

    PHP 手册在openssl_verify 的文档中包含一个完整的示例。

    【讨论】:

    • ...但要注意 - 加密数据是二进制流,这是一个 urlencoded 值 - 虽然有改变数据表示的标准,但也有标准s 用于更改数据的表示 - 您需要 Paybox 提供有关如何验证哈希的明确详细信息
    【解决方案3】:

    可以使用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() 的信息在这里:http://nl.php.net/openssl_verify

    Paybox 的网站“Explications and samples to check digital sign with PAYBOX SYSTEM”也有一个 zip 文件可供下载

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 2020-06-11
      • 2014-05-04
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      相关资源
      最近更新 更多