首頁 >後端開發 >php教程 >如何在 PHP 中使用 OpenSSL 對檔案進行加密和解密?

如何在 PHP 中使用 OpenSSL 對檔案進行加密和解密?

Susan Sarandon
Susan Sarandon原創
2024-11-17 02:57:03260瀏覽

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

使用 MCrypt 加密和解密檔案

Mcrypt 函式庫提供了 PHP 中加密和解密操作的函數。以下是如何使用它來加密和解密檔案的範例:

// 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);
    }
}

重要說明:

  • MCrypt 是一個過時的函式庫,不再是推薦使用。考慮使用更新、更安全的替代方案,例如 OpenSSL 或 Libsodium。
  • 加密/解密金鑰必須安全產生並保密。
  • 初始化向量 (IV) 透過使對於相同的明文和金鑰,密文每次都是唯一的。

以上是如何在 PHP 中使用 OpenSSL 對檔案進行加密和解密?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn