Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan Lanjutan PHP: Bagaimana untuk menjana kod QR dengan tandatangan digital?

Panduan Lanjutan PHP: Bagaimana untuk menjana kod QR dengan tandatangan digital?

PHPz
PHPzasal
2023-08-19 21:22:48902semak imbas

Panduan Lanjutan PHP: Bagaimana untuk menjana kod QR dengan tandatangan digital?

Panduan Lanjutan PHP: Bagaimana untuk menjana kod QR dengan tandatangan digital?

Dengan aplikasi kod QR yang meluas, semakin ramai orang memberi perhatian kepada keselamatan kod QR. Satu cara untuk meningkatkan keselamatan kod QR adalah dengan menambah tandatangan digital, yang menghalang kod QR daripada diganggu atau dipalsukan. Dalam artikel ini, saya akan memperkenalkan cara menggunakan PHP untuk menghasilkan kod QR dengan tandatangan digital.

Langkah pertama untuk menjana kod QR ialah memasang perpustakaan penjanaan kod QR PHP. Dalam contoh ini, kami akan menggunakan perpustakaan Kod QR PHP. Perpustakaan boleh dipasang melalui:

composer require endroid/qr-code

Selepas memasang perpustakaan, kita boleh mula menulis kod. Mula-mula, mari kita hasilkan kod QR ringkas tanpa tandatangan digital:

require 'vendor/autoload.php';

use EndroidQrCodeQrCode;

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

$qrCode = new QrCode($data);

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

Kod di atas akan menghasilkan imej kod QR bernama qrcode.png, yang mengandungi data https://example.com. Sekarang, mari kita lihat cara menambah tandatangan digital pada kod QR.

Tandatangan digital memerlukan penggunaan kunci peribadi dan awam untuk penyulitan dan pengesahan. Dengan mengandaikan kami telah menghasilkan pasangan kunci RSA, kami boleh menggunakan kunci persendirian untuk menandatangani data dan kemudian menggunakan kunci awam untuk mengesahkan tandatangan.

Mula-mula, mari kita jana tandatangan digital:

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');

Dalam kod di atas, kami memuatkan kunci persendirian melalui fungsi openssl_pkey_get_private dan menandatangani data menggunakan fungsi openssl_sign . Kemudian, kami menghasilkan kod QR dengan tandatangan digital dengan menetapkan atribut text dan atribut signature bagi contoh 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

Akhir sekali, kami perlu mengesahkan tandatangan digital menggunakan kunci awam. Berikut ialah contoh kod:

rrreee

Dalam kod di atas, kami menggunakan fungsi openssl_pkey_get_public untuk memuatkan kunci awam dan fungsi openssl_verify untuk mengesahkan data dan tandatangan. Berdasarkan keputusan pengesahan, kita boleh mengetahui kesahihan tandatangan digital tersebut. 🎜🎜Dengan contoh kod di atas, kita boleh belajar cara menggunakan PHP untuk menjana kod QR dengan tandatangan digital. Kaedah ini boleh meningkatkan keselamatan kod QR dan mencegah gangguan dan pemalsuan. Harap artikel ini membantu anda! 🎜

Atas ialah kandungan terperinci Panduan Lanjutan PHP: Bagaimana untuk menjana kod QR dengan tandatangan digital?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn