首页  >  文章  >  后端开发  >  如何在 PHP 中使用 OpenSSL 对文件进行加密和解密?

如何在 PHP 中使用 OpenSSL 对文件进行加密和解密?

Susan Sarandon
Susan Sarandon原创
2024-11-17 02:57:03181浏览

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