Maison >développement back-end >tutoriel php >Guide avancé PHP : Comment générer un code QR avec une signature numérique ?

Guide avancé PHP : Comment générer un code QR avec une signature numérique ?

PHPz
PHPzoriginal
2023-08-19 21:22:48939parcourir

Guide avancé PHP : Comment générer un code QR avec une signature numérique ?

Guide avancé PHP : Comment générer un code QR avec une signature numérique ?

Avec l'application généralisée des codes QR, de plus en plus de personnes prêtent attention à la sécurité des codes QR. Une façon d'augmenter la sécurité d'un code QR consiste à ajouter une signature numérique, qui empêche la falsification ou la contrefaçon du code QR. Dans cet article, je vais vous présenter comment utiliser PHP pour générer un code QR avec une signature numérique.

La première étape pour générer un code QR consiste à installer la bibliothèque de génération de code QR PHP. Dans cet exemple, nous utiliserons la bibliothèque PHP QR Code. La bibliothèque peut être installée via :

composer require endroid/qr-code

Après avoir installé la bibliothèque, nous pouvons commencer à écrire du code. Tout d'abord, générons un simple code QR sans signature numérique :

require 'vendor/autoload.php';

use EndroidQrCodeQrCode;

$data = 'https://example.com'; // 要生成二维码的数据

$qrCode = new QrCode($data);

$qrCode->writeFile('qrcode.png'); // 将二维码保存到文件

Le code ci-dessus générera une image de code QR nommée qrcode.png, qui contient les données https://example.com. Voyons maintenant comment ajouter une signature numérique à un code QR.

Les signatures numériques nécessitent l'utilisation de clés privées et publiques pour le cryptage et la vérification. En supposant que nous ayons généré une paire de clés RSA, nous pouvons utiliser la clé privée pour signer les données, puis utiliser la clé publique pour vérifier la signature.

Tout d'abord, générons une signature numérique :

require 'vendor/autoload.php';

use EndroidQrCodeQrCode;
use MikeBrantQRCodeQRCodeGenerator;

$data = 'https://example.com'; // 要生成二维码的数据

// 加载私钥
$privateKey = openssl_pkey_get_private(file_get_contents('private_key.pem'));

// 对数据进行签名
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);

// 生成二维码
$qrCode = new QrCode();
$qrCode->setText($data);
$qrCode->setSignature($signature);

$qrCode->writeFile('qrcode.png');

Dans le code ci-dessus, nous avons chargé la clé privée via la fonction openssl_pkey_get_private et signé les données à l'aide de la fonction openssl_sign . Ensuite, nous avons généré un code QR avec une signature numérique en définissant l'attribut text et l'attribut signature de l'instance QrCode. openssl_pkey_get_private函数加载了私钥,并使用openssl_sign函数对数据进行签名。然后,我们通过设置QrCode实例的text属性和signature属性生成了带有数字签名的二维码。

最后,我们需要使用公钥验证数字签名。以下是代码示例:

require 'vendor/autoload.php';

use EndroidQrCodeQrCode;

$data = 'https://example.com'; // 要生成二维码的数据

// 加载公钥
$publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem'));

// 验证签名
$isValid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);

if ($isValid === 1) {
    echo '数字签名验证通过!';
} elseif ($isValid === 0) {
    echo '数字签名验证失败!';
} else {
    echo '数字签名验证出错!';
}

在以上代码中,我们使用openssl_pkey_get_public函数加载公钥,并使用openssl_verify

Enfin, nous devons vérifier la signature numérique à l'aide de la clé publique. Voici un exemple de code :

rrreee

Dans le code ci-dessus, nous utilisons la fonction openssl_pkey_get_public pour charger la clé publique et la fonction openssl_verify pour vérifier les données et la signature. Sur la base des résultats de la vérification, nous pouvons connaître la validité de la signature numérique. 🎜🎜Avec l'exemple de code ci-dessus, nous pouvons apprendre à utiliser PHP pour générer un code QR avec une signature numérique. Cette méthode peut améliorer la sécurité des codes QR et empêcher leur falsification et leur contrefaçon. J'espère que cet article vous sera utile ! 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn