要在 PHP 中使用 fopen
函數實現文件的加密和解密,你可以使用對稱加密算法,例如 AES
首先,確保已安裝了 OpenSSL 擴展。大多數環境中默認已經安裝。
<?php
function encryptFile($inputFilename, $outputFilename, $key) {
$cipher = "AES-256-CBC";
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$inputFile = fopen($inputFilename, 'rb');
$outputFile = fopen($outputFilename, 'wb');
// 將初始化向量寫入加密文件
fwrite($outputFile, $iv);
while (!feof($inputFile)) {
$plaintext = fread($inputFile, 16 * 1024);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
fwrite($outputFile, $ciphertext);
}
fclose($inputFile);
fclose($outputFile);
}
$inputFilename = 'plaintext.txt';
$outputFilename = 'encrypted.txt';
$key = 'your-32-character-key';
encryptFile($inputFilename, $outputFilename, $key);
?>
<?php
function decryptFile($inputFilename, $outputFilename, $key) {
$cipher = "AES-256-CBC";
$ivlen = openssl_cipher_iv_length($cipher);
$inputFile = fopen($inputFilename, 'rb');
$outputFile = fopen($outputFilename, 'wb');
// 讀取加密文件中的初始化向量
$iv = fread($inputFile, $ivlen);
while (!feof($inputFile)) {
$ciphertext = fread($inputFile, 16 * 1024);
$plaintext = openssl_decrypt($ciphertext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
fwrite($outputFile, $plaintext);
}
fclose($inputFile);
fclose($outputFile);
}
$inputFilename = 'encrypted.txt';
$outputFilename = 'decrypted.txt';
$key = 'your-32-character-key';
decryptFile($inputFilename, $outputFilename, $key);
?>
這兩個示例中的 encryptFile
和 decryptFile
函數分別用于加密和解密文件。請注意,密鑰應該是隨機生成的,并且足夠長(在這個例子中,我們使用了一個 32 個字符的密鑰)。在實際應用中,你需要確保密鑰的安全存儲。