Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh menyulitkan dan menyahsulit rentetan dengan selamat dalam PHP?

Bagaimanakah saya boleh menyulitkan dan menyahsulit rentetan dengan selamat dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-24 07:29:32838semak imbas

How Can I Encrypt and Decrypt Strings Securely in PHP?

Cara Menyulitkan dan Menyahsulit Rentetan PHP dengan Kunci

Menyulitkan dan menyahsulit rentetan dalam PHP melibatkan penggunaan teknik kriptografi untuk melindungi sensitif maklumat.

Penyulitan

Untuk menyulitkan rentetan menggunakan kunci rahsia:

  1. Gunakan AES dalam mod CTR: Sulitkan rentetan menggunakan Advanced Encryption Standard (AES) dalam Counter (CTR) mod.
  2. Sahkan teks sifir: Kira Kod Pengesahan Mesej berasaskan Hash (HMAC) ke atas IV dan teks sifir menggunakan HMAC-SHA-256 atau Poly1305 (untuk strim sifir).

Penyahsulitan

Untuk menyahsulit rentetan yang disulitkan menggunakan kekunci yang sama:

  1. Semak MAC : Kira semula MAC dan bandingkan dengan yang disimpan satu.
  2. Nyahsulit mesej: Nyahsulit teks sifir menggunakan AES dalam mod CTR.

Pertimbangan Lain

  • Elakkan memampatkan data sebelum penyulitan.
  • Gunakan mb_strlen() dan mb_substr() dengan set aksara '8bit' untuk mengelakkan isu.
  • Jana IV menggunakan CSPRNG dan elakkan MCRYPT_RAND.
  • Sentiasa enkripsi kemudian MAC untuk memastikan kerahsiaan dan ketulenan.

Libsodium untuk PHP

Jika menggunakan PHP 7.2 atau lebih tinggi, pertimbangkan untuk menggunakan perpustakaan libsodium:

use ParagonIE\Halite\Symmetric\Crypto as SymmetricCrypto;

$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$ciphertext = SymmetricCrypto::encrypt($message, $key);
$plaintext = SymmetricCrypto::decrypt($ciphertext, $key);

defuse/php-encryption

Sebagai alternatif kepada libsodium:

use Defuse\Crypto\Crypto;

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

Kata Laluan Pertimbangan

  • Untuk kata laluan: Hash mereka menggunakan Argon2, scrypt, bcrypt atau PBKDF2-SHA256 dengan lelaran yang tinggi.
  • Untuk pengesahan : Gunakan algoritma berasaskan HMAC seperti HKDF2 atau hash_hmac() dan bukannya penyulitan.
  • Untuk parameter URL: Gunakan rangka kerja atau pustaka yang sesuai direka untuk pengesahan parameter URL dan perlindungan gangguan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyulitkan dan menyahsulit rentetan dengan selamat 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