Maison >développement back-end >tutoriel php >Explication détaillée de la génération de signature par PHP et de la vérification de la signature
Cet article présente principalement des informations pertinentes sur la génération de signatures et la vérification des signatures en php
.
<?php /** * 根据原文生成签名内容 * * @param string $data 原文内容 * * @return string * @author confu */ function sign($data) { $filePath = 'test.p12'; if(!file_exists($filePath)) { return false; } $pkcs12 = file_get_contents($filePath); if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) { $privateKey = $certs['pkey']; //根据实际情况键值可能不同 $publicKey = $certs['cert']; //根据实际情况键值可能不同 $binary_signature = ""; if (openssl_sign($data, $binarySignature, $privateKey, OPENSSL_ALGO_SHA1)) { return $binarySignature; } else { return ''; } } else { return ''; } } /** * 验证签名自己生成的是否正确 * * @param string $data 签名的原文 * @param string $signature 签名 * * @return bool * @author confu */ function verifySign($data, $signature) { $filePath = 'test.p12'; if(!file_exists($filePath)) { return false; } $pkcs12 = file_get_contents($filePath); if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) { $publicKey = $certs['cert']; $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 = 'allinpay-pds.pem'; 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 Le paramètre signature_alg par défaut est OPENSSL_ALGO_SHA1
Si vous utilisez le cryptage DSA, vous devez utiliser le paramètre OPENSSL_ALGO_DSS1
signature_alg Autres paramètres
OPENSSL_ALGO_DSS1 (entier) OPENSSL_ALGO_SHA1 (entier) OPENSSL_ALGO_SHA224 (entier) OPENSSL_ALGO_SHA256 (entier)OPENSSL_ALGO_SHA384 (entier) OPENSSL_ALGO_SHA512 (entier) OPENSSL_ALGO_RMD160 (entier) OPENSSL_ALGO_MD5 (entier) OUVERT SL_ALGO_MD4 (entier)
OPENSSL_ALGO_MD2 (entier)Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Recommandations associées :
Explication détaillée de la façon dont PHP reçoit les e-mails basés sur IMAP
PHP implémente le verrouillage de fichier et le verrouillage de processus
Explication détaillée de la façon de modifier le fichier hosts en PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!