Bagaimana untuk melaksanakan penyulitan dan penyahsulitan maklumat dalam PHP

WBOY
Lepaskan: 2023-06-18 10:12:01
asal
2856 orang telah melayarinya

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;
}
Salin selepas log masuk

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');
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!