Home > Backend Development > PHP Tutorial > PHP Advanced Guide: How to generate a QR code with a digital signature?

PHP Advanced Guide: How to generate a QR code with a digital signature?

PHPz
Release: 2023-08-19 21:24:01
Original
937 people have browsed it

PHP Advanced Guide: How to generate a QR code with a digital signature?

PHP Advanced Guide: How to generate a QR code with a digital signature?

With the widespread application of QR codes, more and more people are paying attention to the security of QR codes. One way to increase the security of a QR code is to add a digital signature, which prevents the QR code from being tampered with or counterfeited. In this article, I will introduce how to use PHP to generate a QR code with a digital signature.

The first step to generate a QR code is to install the PHP QR code generation library. In this example, we will use the PHP QR Code library. The library can be installed via:

composer require endroid/qr-code
Copy after login

After installing the library, we can start writing code. First, let us generate a simple QR code without a digital signature:

require 'vendor/autoload.php';

use EndroidQrCodeQrCode;

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

$qrCode = new QrCode($data);

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

The above code will generate a QR code image named qrcode.png, which contains the data https:// example.com. Now, let’s take a look at how to add a digital signature to a QR code.

Digital signatures require the use of private and public keys for encryption and verification. Assuming we have generated an RSA key pair, we can use the private key to sign the data and then use the public key to verify the signature.

First, let us generate a digital signature:

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');
Copy after login

In the above code, we loaded the private key through the openssl_pkey_get_private function and used openssl_sign The function signs the data. Then, we generated a QR code with a digital signature by setting the text attribute and signature attribute of the QrCode instance.

Finally, we need to verify the digital signature using the public key. The following is a code example:

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 '数字签名验证出错!';
}
Copy after login

In the above code, we use the openssl_pkey_get_public function to load the public key and the openssl_verify function to verify the data and signature. Based on the verification results, we can know the validity of the digital signature.

Through the above code examples, we can learn how to use PHP to generate QR codes with digital signatures. This method can improve the security of QR codes and prevent tampering and counterfeiting. Hope this article is helpful to you!

The above is the detailed content of PHP Advanced Guide: How to generate a QR code with a digital signature?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template