Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Rentetan dalam PHP Menggunakan Perpustakaan Ditubuhkan?

Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Rentetan dalam PHP Menggunakan Perpustakaan Ditubuhkan?

Barbara Streisand
Barbara Streisandasal
2024-12-17 10:06:24982semak imbas

How Can I Securely Encrypt and Decrypt Strings in PHP Using Established Libraries?

Menyulitkan dan Menyahsulit Rentetan dalam PHP

Mengelakkan Perangkap Biasa

Sebelum mendalami pelaksanaan penyulitan dan penyahsulitan, adalah penting untuk memahami perbezaan antara penyulitan dan pengesahan. Untuk perlindungan data yang selamat, penyulitan yang disahkan adalah disyorkan berbanding penyulitan mudah. Selain itu, adalah dinasihatkan untuk mengelak daripada membuat pelaksanaan kriptografi tersuai dan sebaliknya bergantung pada perpustakaan yang selamat dan mantap seperti libsodium atau defuse/php-encryption.

Penyulitan dan Penyahsulitan

Penyulitan:

  1. Sulitkan data menggunakan AES-CTR atau GCM (disyorkan).
  2. Sahkan teks sifir menggunakan HMAC-SHA-256 (atau Poly1305 untuk strim sifir).

Penyahsulitan:

  1. Sahkan MAC teks sifir (jika tidak menggunakan Poly1305 atau GCM).
  2. Nyahsulit mesej.

Pelaksanaan dengan Libsodium

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);

Pelaksanaan dengan defuse/php-encryption

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;

$key = Key::createNewRandomKey();

$ciphertext = Crypto::encrypt($message, $key);
$plaintext = Crypto::decrypt($ciphertext, $key);

Pertimbangan Tambahan

  • Elakkan daripada memampatkan data sebelum ini penyulitan.
  • Gunakan fungsi selamat seperti mb_strlen() dan mb_substr() untuk manipulasi rentetan.
  • Jana IV menggunakan CSPRNG (cth., random_bait()).
  • Elakkan menggunakan berfungsi seperti bin2hex() atau base64_encode() untuk maklumat yang berpotensi kebocoran.
  • Sentiasa sahkan teks sifir (MAC) selepas penyulitan.

Awas

  • Jangan menyulitkan kata laluan; sebaliknya gunakan algoritma pencincangan kata laluan.
  • Jangan menyulitkan parameter URL; ia bukan penyelesaian yang sesuai.

Contoh dengan Libsodium

use Sodium\Crypto\SecretBox;

$key = random_bytes(SecretBox::KEYBYTES);
$nonce = random_bytes(SecretBox::NONCEBYTES);

$ciphertext = SecretBox::encrypt($message, $nonce, $key);
$plaintext = SecretBox::decrypt($ciphertext, $nonce, $key);

echo "Ciphertext: " . $ciphertext . PHP_EOL;
echo "Plaintext: " . $plaintext . PHP_EOL;

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Rentetan dalam PHP Menggunakan Perpustakaan Ditubuhkan?. 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