Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan OpenSSL dalam PHP?

Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan OpenSSL dalam PHP?

Susan Sarandon
Susan Sarandonasal
2024-11-17 02:57:03263semak imbas

How Can I Encrypt and Decrypt Files Using OpenSSL in PHP?

Menyulitkan dan Menyahsulit Fail dengan MCrypt

Pustaka Mcrypt menyediakan fungsi untuk operasi penyulitan dan penyahsulitan dalam PHP. Berikut ialah contoh cara menggunakannya untuk menyulitkan dan menyahsulit fail:

// ENCRYPT FILE
function encryptFile() {
    $key = generateKey(); // Function to generate a secure encryption key
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc')); // Generate a random initialization vector

    $plaintext = file_get_contents(PATH . '/ftpd/' . $file);
    $encrypted = openssl_encrypt($plaintext, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);

    $encryptedFile = fopen(PATH . '/encrypted/' . $file . '.txt', 'w');
    fwrite($encryptedFile, $iv . $encrypted);
    fclose($encryptedFile);

    unlink(PATH . '/ftpd/' . $file);
}

// DECRYPT FILE
function decryptFile() {
    $key = generateKey(); // Function to generate the same encryption key used in encryption

    if ($handle = opendir(PATH . '/encrypted')) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $encryptedFile = fopen(PATH . '/encrypted/' . $file, 'r');
                $encryptedData = fread($encryptedFile, filesize(PATH . '/encrypted/' . $file));

                $iv = substr($encryptedData, 0, openssl_cipher_iv_length('aes-128-cbc'));
                $decrypted = openssl_decrypt(substr($encryptedData, openssl_cipher_iv_length('aes-128-cbc')), 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);

                $decryptedFile = fopen(PATH . '/decrypted/' . $file, 'w');
                fwrite($decryptedFile, $decrypted);
                fclose($decryptedFile);

                // unlink(PATH . '/encrypted/' . $file);
            }
        }
        closedir($handle);
    }
}

Nota penting:

  • MCrypt ialah perpustakaan yang sudah lapuk dan tidak lagi disyorkan untuk digunakan. Pertimbangkan untuk menggunakan alternatif yang lebih baharu dan lebih selamat, seperti OpenSSL atau Libsodium.
  • Kunci penyulitan/penyahsulitan mesti dijana dengan selamat dan dirahsiakan.
  • Vektor permulaan (IV) menyediakan keselamatan tambahan dengan membuat teks sifir unik setiap kali untuk teks biasa dan kunci yang sama.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan OpenSSL 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