Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan penyulitan dan penyahsulitan maklumat dalam PHP

Bagaimana untuk melaksanakan penyulitan dan penyahsulitan maklumat dalam PHP

WBOY
WBOYasal
2023-06-18 10:10:392805semak imbas

Dengan perkembangan pesat teknologi maklumat, penyulitan dan penyahsulitan maklumat secara beransur-ansur menjadi salah satu cara penting untuk melindungi maklumat digital hari ini. Sebagai bahasa pengaturcaraan yang digunakan secara meluas dalam bidang pembangunan Web, kaedah PHP untuk menyulitkan dan menyahsulit maklumat juga menjadi sangat penting.

Dalam artikel ini, saya akan memperkenalkan beberapa kaedah tentang cara melaksanakan penyulitan dan penyahsulitan maklumat dalam PHP.

1. Gunakan fungsi penyulitan PHP sendiri

Dalam PHP, kami boleh menggunakan satu siri fungsi penyulitan terbina dalam untuk menyulitkan dan menyahsulit data. Fungsi ini termasuk md5(), sha1(), base64_encode(), base64_decode(), dsb.

Pertama, kami memilih fungsi base64_encode() dan base64_decode() untuk demonstrasi. Mereka boleh menukar data kepada satu set rentetan yang terdiri daripada A-Z, a-z, 0-9, +, / aksara dan memulihkan data asal selepas penyahsulitan.

Kod pelaksanaan khusus adalah seperti berikut:

//加密函数
function encrypt($data){
    $data = base64_encode($data);
    return $data;
}

//解密函数
function decrypt($data){
    $data = base64_decode($data);
    return $data;
}

Melalui kedua-dua fungsi ini, kami boleh melaksanakan penyulitan dan penyahsulitan mudah data. Walau bagaimanapun, perlu diingatkan bahawa kaedah ini tidak begitu selamat kerana ia boleh dilakukan secara kasar.

2. Gunakan algoritma penyulitan simetri

Algoritma penyulitan simetri ialah algoritma yang menggunakan kunci yang sama untuk menyulitkan dan menyahsulit data algoritma penyulitan simetri biasa termasuk DES, AES, dsb.

Dalam PHP, kami boleh menggunakan perpustakaan mcrypt atau sambungan openssl untuk melaksanakan algoritma penyulitan simetri.

Kami mengambil algoritma AES sebagai contoh untuk menunjukkan kaedah pelaksanaan algoritma penyulitan simetri. Kod pelaksanaan khusus adalah seperti berikut:

$key = '1234567890123456'; //密钥
$plaintext = 'Hello, world!'; //原始明文数据

//加密
$ciphertext = openssl_encrypt($plaintext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, '1234567890123456');
$ciphertext = base64_encode($ciphertext);

//解密
$ciphertext = base64_decode($ciphertext);
$plaintext = openssl_decrypt($ciphertext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, '1234567890123456');

Antaranya, $key ialah kunci dan $plaintext ialah data plaintext asal. Penyulitan menggunakan fungsi openssl_encrypt() dan penyahsulitan menggunakan fungsi openssl_decrypt().

Adalah penting untuk ambil perhatian bahawa pilihan algoritma penyulitan hendaklah berdasarkan situasi sebenar. Jika anda mempertimbangkan kaedah penyulitan yang lebih selamat, anda boleh memilih algoritma AES-256, tetapi kelajuan penyulitan akan menjadi lebih perlahan.

3. Gunakan algoritma penyulitan asimetrik

Algoritma penyulitan asimetri ialah algoritma yang menggunakan sepasang kunci (kunci awam dan kunci persendirian) untuk menyulitkan dan menyahsulit data biasa bukan-Algoritma penyulitan ialah RSA.

Dalam PHP, kami boleh menggunakan sambungan openssl untuk melaksanakan algoritma penyulitan asimetri.

Kami mengambil algoritma RSA sebagai contoh untuk menunjukkan kaedah pelaksanaan algoritma penyulitan asimetri. Kod pelaksanaan khusus adalah seperti berikut:

$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC7C1DJoA4vf6Z+/gwTt3eOjQqi7odXbVf/eKeTX2YVi2wS+Z02
Jbcm8+pkuGZDNxXgO89qr13ytGWUhcSy2t/hRMmLjAdEIiCU8a9VcdDsk1Bgz4Ir
qKLj84XdT3pc5N9yMSsEItvqn31ro7/5nDdzRJAsWH6xd220EaJLZL7/hwIDAQAB
AoGBAIJc3cZhytX5jni/jdDa7+keAwDTbLsPAx1pyJvZbIZ26v8f8cxVgCD1yJ0+
Fm6fi/BTcCfi5UOD6ClIdYxQ9ZsHkhDkU+z8r114kguNziHkrm2kR/ijXmYdNDaU
Y9jNtRjvMHOQWfj+ym9p2jKJd/wYG1TodY5AVMJeSLvjo/7RAkEA/6je8XnhVADo
xMGs/eJ80AYEVo11+6PjxVVqivJ0O0l8DNd+4ih+U2ohjvQEjBpfcUGWx+cpxhR8
iE5TgrPXswJBANg/xhNhMNqL4DsXdc0y37n68QAVR/+SNYkipUZqHSIqe6LH4db/
H09kWeZJQ4ArtiIwgl5Q5dgngnAubdVreRUCQDXN287lEns+hIn7GUYWCO5V4fND
WbM8K02UaO+qutglLrbzIlLa6+IjYb+7p8adR/K66QiLJe6UdMze3/Nlzi0CQQCV
Xa5m6m1Q7lfALG53u0dvpVx3JmIEPZvfYh8onMyODFfF4PPFNZwgIjlbSRVTFxJ1
hW2PWF1EBbJ2vEI7tWnBAkEAt0LnrmfkApmwhPiEKzjvezUnTeqWcZaImp7uZ8V7
av2Q43WTXNQeKAzI4ItZHvEKtN0Xrnvah7NiW7K7ZQA25w==
-----END RSA PRIVATE KEY-----
EOD;

$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7C1DJoA4vf6Z+/gwTt3eOjQqi
7odXbVf/eKeTX2YVi2wS+Z02Jbcm8+pkuGZDNxXgO89qr13ytGWUhcSy2t/hRMmL
jAdEIiCU8a9VcdDsk1Bgz4IrqKLj84XdT3pc5N9yMSsEItvqn31ro7/5nDdzRJAs
WH6xd220EaJLZL7/hwIDAQAB
-----END PUBLIC KEY-----
EOD;

$plaintext = 'Hello, world!';

//私钥加密
openssl_private_encrypt($plaintext, $ciphertext, $private_key);
$ciphertext = base64_encode($ciphertext);

//公钥解密
$ciphertext = base64_decode($ciphertext);
openssl_public_decrypt($ciphertext, $plaintext, $public_key);

Antaranya, $private_key ialah kunci peribadi, $public_key ialah kunci awam dan $plaintext ialah data plaintext asal. Penyulitan menggunakan fungsi openssl_private_encrypt() dan penyahsulitan menggunakan fungsi openssl_public_decrypt().

Perlu diingatkan bahawa kelajuan penyulitan algoritma RSA adalah perlahan, jadi ia tidak sesuai untuk menyulitkan sejumlah besar data. Dalam aplikasi praktikal, kita boleh menggunakan gabungan algoritma penyulitan simetri dan algoritma penyulitan asimetri Mula-mula gunakan algoritma penyulitan simetri untuk menyulitkan data, dan kemudian menggunakan algoritma penyulitan asimetri untuk menyulitkan kunci yang digunakan oleh algoritma penyulitan simetri.

Ringkasnya, di atas adalah beberapa kaedah untuk PHP melaksanakan penyulitan dan penyahsulitan maklumat. Dalam aplikasi praktikal, kita harus mempertimbangkan kaedah penyulitan mana yang hendak dipilih berdasarkan keperluan dan keselamatan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penyulitan dan penyahsulitan maklumat dalam PHP. 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