Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaedah penyulitan dan penyahsulitan PHP serta penyelesaian kepada masalah biasa

Kaedah penyulitan dan penyahsulitan PHP serta penyelesaian kepada masalah biasa

王林
王林asal
2023-06-09 13:50:422336semak imbas

PHP ialah bahasa pengaturcaraan sebelah pelayan yang popular yang digunakan secara meluas dalam pembangunan aplikasi web. Dalam aplikasi praktikal, penyulitan dan penyahsulitan PHP adalah operasi yang sangat biasa. Artikel ini akan memperkenalkan kaedah penyulitan dan penyahsulitan biasa dalam PHP, serta penyelesaian kepada masalah biasa.

1. Kaedah penyulitan

1. Kriptografi Symmetric

Penyulitan simetri ialah kaedah yang paling banyak digunakan dalam teknologi penyulitan. Kaedah ini menggunakan kunci yang sama untuk menyulitkan dan menyahsulit data.

Dalam PHP, algoritma penyulitan simetri yang biasa digunakan termasuk DES (Data Encryption Standard), 3DES (Triple DES) dan AES (Advanced Encryption Standard). Antaranya, AES ialah algoritma penyulitan simetri yang paling biasa digunakan Oleh kerana kekuatan penyulitan yang tinggi, kelajuan pengkomputeran yang pantas dan keselamatan yang baik, ia digunakan secara meluas dalam banyak bidang keselamatan maklumat.

Berikut ialah contoh penyulitan menggunakan algoritma penyulitan simetri AES:

<?php
 
$data = 'Hello, world!';  // 待加密的数据
 
$secret_key = '123456';   // 密钥
 
$iv = openssl_random_pseudo_bytes(16);  // 随机向量
 
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $secret_key, 0, $iv); // 加密
 
$decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $secret_key, 0, $iv); // 解密
 
echo "加密后:" . $encrypted . "<br>解密后:" . $decrypted;
 
?>

2 Kriptografi Asymmetric (Asymmetric Cryptography)

Penyulitan asimetri merujuk kepada penyulitan dan penyahsulitan Gunakan berbeza. kunci. Ia biasanya digunakan untuk penyulitan semasa penghantaran data Contohnya, protokol HTTPS menggunakan penyulitan asimetri untuk memastikan penghantaran data yang selamat.

Dalam PHP, algoritma penyulitan asimetri yang biasa digunakan termasuk RSA (Rivest–Shamir–Adleman) dan DSA (Algoritma Tandatangan Digital). Antaranya, RSA ialah salah satu daripada algoritma penyulitan asimetri yang paling biasa digunakan.

Berikut ialah contoh penyulitan menggunakan algoritma penyulitan asimetri RSA:

<?php
 
$data = 'Hello, world!';  // 待加密的数据
 
$private_key = openssl_pkey_new();  // 生成密钥对
 
openssl_pkey_export($private_key, $private_key_pem);  // 提取密钥对中的私钥
 
$public_key = openssl_pkey_get_details($private_key)['key'];  // 提取密钥对中的公钥
 
openssl_public_encrypt($data, $encrypted, $public_key); // 加密
 
openssl_private_decrypt($encrypted, $decrypted, $private_key); // 解密
 
echo "加密后:" . base64_encode($encrypted) . "<br>解密后:" . $decrypted;
 
?>

2 Kaedah penyahsulitan

Penyahsulitan adalah untuk memulihkan data yang disulitkan dan memulihkan kandungan data asal. proses.

Dalam PHP, seperti dalam contoh di atas, anda boleh menggunakan fungsi openssl_decrypt untuk menyahsulit data yang disulitkan menggunakan algoritma penyulitan simetri (jika algoritma penyulitan asimetri digunakan, gunakan fungsi openssl_private_decrypt). Dalam operasi penyahsulitan, kunci yang sama dan vektor rawak diperlukan untuk menyahsulit data.

3. Penyelesaian kepada masalah biasa

1 Penyahsulitan gagal

Jika penyahsulitan gagal, anda perlu menyemak aspek berikut:

(1) Kunci Betul atau tidak: Kunci dan vektor rawak penyulitan simetri perlu konsisten, jika tidak, ia akan menyebabkan ralat penyahsulitan atau kegagalan penyahsulitan.

(2) Sama ada data telah diusik: Jika data yang disulitkan diganggu semasa penghantaran, penyahsulitan mungkin gagal. Tandatangan digital atau kod pengesahan mesej boleh digunakan untuk mengesahkan integriti data.

(3) Sama ada algoritma penyulitan adalah betul: Jika algoritma yang digunakan untuk penyulitan dan penyahsulitan tidak konsisten, ia juga akan menyebabkan penyahsulitan gagal.

2. Kekuatan penyulitan

Apabila kaedah penyulitan yang digunakan dalam PHP menyulitkan data, anda perlu memilih kekuatan penyulitan yang sesuai. Kekuatan penyulitan yang terlalu lemah boleh menjadikan data yang disulitkan terdedah kepada serangan, manakala kekuatan penyulitan yang terlalu kuat boleh menjadikan operasi penyulitan dan penyahsulitan lebih perlahan. Oleh itu, pilihan kekuatan penyulitan yang munasabah diperlukan.

Biasanya, menggunakan kekuatan penyulitan yang lebih kuat boleh digunakan sebagai cara kerahsiaan data Contohnya, algoritma AES-256-CBC menggunakan kunci yang lebih kuat.

3. Tandatangan digital

Tandatangan digital ialah teknologi yang membuktikan integriti sumber dan kandungan mesej dengan menggunakan teknologi penyulitan dan pencincangan. Semasa proses tandatangan digital, pengirim menggunakan kunci peribadinya sendiri untuk menyulitkan kandungan mesej, dan penerima menggunakan kunci awam penghantar untuk menyahsulit data dan mengesahkan integritinya.

Dalam PHP, anda boleh menggunakan fungsi openssl_sign dan fungsi openssl_verify untuk melaksanakan fungsi tandatangan digital.

4. Kod Pengesahan Mesej (MAC)

Kod Pengesahan Mesej (MAC) ialah teknik yang digunakan untuk menyemak integriti mesej dengan mencincang mesej menggunakan kekunci dan kemudian Tambah hasilnya selepas mesej itu. Selepas penerima menerima mesej, ia mengira semula nilai cincang dan membandingkan hasilnya dengan mesej untuk mengesahkan integriti mesej.

Dalam PHP, anda boleh menggunakan fungsi hash_hmac untuk mengira MAC.

Perkara di atas memperkenalkan kaedah penyulitan dan penyahsulitan yang biasa digunakan dalam PHP dan penyelesaian kepada masalah biasa. Dalam aplikasi sebenar, faktor seperti kaedah penyulitan, kekuatan penyulitan, tandatangan digital dan kod pengesahan mesej perlu dipertimbangkan dan dikonfigurasikan secara menyeluruh mengikut keperluan khusus.

Atas ialah kandungan terperinci Kaedah penyulitan dan penyahsulitan PHP serta penyelesaian kepada masalah biasa. 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