Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erklärung der PHP-Signaturgenerierung und -Signaturprüfung

Ausführliche Erklärung der PHP-Signaturgenerierung und -Signaturprüfung

墨辰丷
墨辰丷Original
2018-05-31 10:23:295637Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zum Generieren von Signaturen und Überprüfen von Signaturen in PHP vorgestellt. Freunde, die diese benötigen, können sich auf

Signaturen generieren und Signaturen in PHP überprüfen

beziehen

<?php
  /**
   * 根据原文生成签名内容
   *
   * @param string $data 原文内容
   *
   * @return string
   * @author confu
   */
  function sign($data)
  {
    $filePath = &#39;test.p12&#39;;
    if(!file_exists($filePath)) {
      return false;
    }
 
    $pkcs12 = file_get_contents($filePath);
    if (openssl_pkcs12_read($pkcs12, $certs, &#39;读取证书所需要的密码&#39;)) {
      $privateKey = $certs[&#39;pkey&#39;]; //根据实际情况键值可能不同
      $publicKey = $certs[&#39;cert&#39;]; //根据实际情况键值可能不同
      $binary_signature = "";
      if (openssl_sign($data, $binarySignature, $privateKey, OPENSSL_ALGO_SHA1)) {
        return $binarySignature;
      } else {
        return &#39;&#39;;
      }
    } else {
      return &#39;&#39;;
    }
  }
 
  /**
   * 验证签名自己生成的是否正确
   *
   * @param string $data 签名的原文
   * @param string $signature 签名
   *
   * @return bool
   * @author confu
   */
  function verifySign($data, $signature)
  {
    $filePath = &#39;test.p12&#39;;
    if(!file_exists($filePath)) {
      return false;
    }
 
    $pkcs12 = file_get_contents($filePath);
    if (openssl_pkcs12_read($pkcs12, $certs, &#39;读取证书所需要的密码&#39;)) {
      $publicKey = $certs[&#39;cert&#39;];
      $ok = openssl_verify($data, $signature, $publicKey);
      if ($ok == 1) {
        return true;
      }
    }
    return false;
  }
 
  /**
   * 验证返回的签名是否正确
   *
   * @param string $data 要验证的签名原文
   * @param string $signature 签名内容
   *
   * @return bool
   * @author confu
   */
  function verifyRespondSign($data, $signature)
  {
    $filePath = &#39;allinpay-pds.pem&#39;;
    if(!file_exists($filePath)) {
      return false;
    }
 
    $fp = fopen($filePath, "r");
    $cert = fread($fp, 8192);
    fclose($fp);
    $pubkeyid = openssl_get_publickey($cert);
 
    if(!is_resource($pubkeyid)) {
      return false;
    }
 
    $ok = openssl_verify($data, $signature, $pubkeyid);
    if ($ok == 1) {
      openssl_free_key($pubkeyid);
      return true;
    }
    return false;
  }
?>

openssl_sign Der Standard-Signature_alg-Parameter ist OPENSSL_ALGO_SHA1

Wenn Sie DSA-Verschlüsselung verwenden, müssen Sie den Parameter OPENSSL_ALGO_DSS1

Signature_alg Andere Parameter

OPENSSL_ALGO_DSS1 (Ganzzahl)

OPENSSL_ALGO_SHA1 (Ganzzahl)

OPENSSL_ALGO_SHA224 (Ganzzahl)

OPENSSL_ALGO_ SHA256 (Ganzzahl )

OPENSSL_ALGO_SHA384 (Ganzzahl)

OPENSSL_ALGO_SHA512 (Ganzzahl)

OPENSSL_ALGO_RMD160 (Ganzzahl)

OPENSSL_ALGO_MD5. (Ganzzahl)

OPENSSL _ALGO_MD4 ( Ganzzahl)

OPENSSL_ALGO_MD2 (Ganzzahl)

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.


Verwandte Empfehlungen:

Detaillierte Erklärung, wie PHP E-Mails basierend auf IMAP empfängt

PHP implementiert Dateisperre und Prozesssperre

Detaillierte Erklärung, wie man die Hosts-Datei in PHP ändert

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der PHP-Signaturgenerierung und -Signaturprüfung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn