Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melakukan penyulitan simetri dan asimetri dalam PHP?

Bagaimana untuk melakukan penyulitan simetri dan asimetri dalam PHP?

WBOY
WBOYasal
2023-05-21 15:10:402422semak imbas

Dalam bidang keselamatan rangkaian, teknologi penyulitan adalah cara teknikal yang sangat penting, yang boleh menyulitkan dan menyahsulit data untuk memastikan keselamatan data. Sebagai bahasa pengaturcaraan sebelah pelayan yang popular, PHP juga menyediakan sokongan untuk penyulitan simetri dan asimetri untuk memenuhi keperluan senario aplikasi yang berbeza.

  1. Penyulitan simetri

Penyulitan simetri merujuk kepada kaedah penyulitan yang menggunakan kunci yang sama untuk penyulitan dan penyahsulitan. Terdapat banyak algoritma penyulitan simetri, seperti DES, 3DES, AES, dll. Dalam PHP, penyulitan simetri boleh dilaksanakan menggunakan fungsi yang disediakan oleh perpustakaan sambungan mcrypt.

Kod sampel adalah seperti berikut:

$key = '123456789'; // 密钥
$data = 'Hello World'; // 待加密字符串
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$cipher = mcrypt_encrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC, $iv);
echo base64_encode($cipher); // 输出加密后的字符串

Dalam kod di atas, penyulitan DES dilakukan melalui fungsi mcrypt_encrypt dan mod MCRYPT_MODE_CBC digunakan untuk padding. $key ialah kunci untuk penyulitan simetri, $data ialah rentetan teks biasa untuk disulitkan dan $iv ialah vektor pemula rawak.

Kod sampel penyahsulitan adalah seperti berikut:

$cipher = base64_decode('JnFXVC9e+rzR8oUgM67Q0w=='); // 加密后的字符串
$key = '123456789'; // 密钥
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$plain = mcrypt_decrypt(MCRYPT_DES, $key, $cipher, MCRYPT_MODE_CBC, $iv);
echo $plain; // 输出解密后的字符串
  1. Penyulitan asimetri

Algoritma penyulitan asimetri memerlukan sepasang kunci untuk penyulitan dan penyahsulitan, di mana kunci awam Kunci boleh didedahkan kepada umum, tetapi kunci peribadi mesti dirahsiakan. Algoritma penyulitan asimetri yang biasa digunakan termasuk RSA, DSA, dsb. Dalam PHP, penyulitan asimetri boleh dilaksanakan menggunakan fungsi yang disediakan oleh perpustakaan sambungan openssl.

Kod sampel adalah seperti berikut:

$data = 'Hello World'; // 待加密字符串
$res = openssl_pkey_new(); // 生成密钥对
openssl_pkey_export($res, $privateKey); // 获取私钥
$publicKey = openssl_pkey_get_details($res)["key"]; // 获取公钥
openssl_public_encrypt($data, $cipher, $publicKey); // 加密数据
echo base64_encode($cipher); // 输出加密后的字符串

Dalam kod di atas, fungsi openssl_pkey_new mula-mula digunakan untuk menjana sepasang kunci awam dan peribadi, dan kemudian fungsi openssl_public_encrypt digunakan untuk menyulitkan data tersebut. $publicKey yang diperoleh pada masa ini boleh didedahkan kepada umum, tetapi $privateKey mesti dirahsiakan.

Kod sampel penyahsulitan adalah seperti berikut:

$cipher = base64_decode('RvnOeNe+p8LtlpuUcq0wqFoX2yUaGXvY6FHlWpT0NQwzVQwVcDSnkw4C6YJMvnsMH4N5JDP18RI8x7CFqUCdJg=='); // 加密后的字符串
$privateKey = '-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----'; // 私钥
openssl_private_decrypt($cipher, $plain, $privateKey); // 解密数据
echo $plain; // 输出解密后的字符串

Dalam kod di atas, mula-mula gunakan fungsi openssl_pkey_export untuk mendapatkan bentuk rentetan kunci persendirian, dan kemudian gunakan fungsi openssl_private_decrypt untuk menyahsulit data yang disulitkan dan dapatkan plainteks asal.

Ringkasan:

Melalui pengenalan di atas, kami mengetahui bahawa dalam PHP, anda boleh menggunakan perpustakaan sambungan mcrypt dan openssl untuk melaksanakan penyulitan simetri dan tidak simetri. Untuk keperluan penyulitan yang berbeza dalam senario aplikasi, kami boleh memilih secara fleksibel untuk menggunakan algoritma penyulitan dan kaedah penyulitan yang berbeza. Sudah tentu, semasa proses penyulitan sebenar, kita juga perlu memberi perhatian kepada perlindungan dan pengurusan kunci untuk memastikan keselamatan data.

Atas ialah kandungan terperinci Bagaimana untuk melakukan penyulitan simetri dan asimetri 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