[php] PHP 파일 업로드와 파일 암호화

이번에는 PHP를 사용하여 파일을 업로드하고 암호화하는 방법에 대해 알아보겠습니다.

파일 업로드

PHP에서 파일을 업로드하는데는 move_uploaded_file 함수를 사용합니다. 이 함수는 업로드된 파일을 지정된 위치로 이동시킵니다. 먼저 HTML 폼을 생성하여 사용자로부터 파일을 선택하도록 합니다. 그 다음 PHP 파일에서 $_FILES 배열을 사용하여 파일을 처리합니다.

예를 들어, 다음과 같이 HTML 폼을 생성하고 PHP에서 파일을 업로드할 수 있습니다.

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload">
    <input type="submit" value="Upload File" name="submit">
</form>

그리고 upload.php 파일에서 파일을 업로드하는 방법은 다음과 같습니다.

<?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}
?>

파일 암호화

파일을 암호화하기 위해서는 PHP에서 OpenSSL을 사용할 수 있습니다. OpenSSL은 강력한 암호화 기능을 제공하여 파일을 안전하게 암호화할 수 있습니다.

다음은 PHP를 사용하여 파일을 암호화하는 간단한 예제입니다.

<?php
$inputFile = 'plainfile.txt';
$outputFile = 'encryptedfile.enc';
$encryptionKey = 'mySecretKey';

$plaintext = file_get_contents($inputFile);
$cipher = 'aes-256-cbc';
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $encryptionKey, $options=0, $iv);
file_put_contents($outputFile, $iv.$ciphertext);
?>

위의 예제에서는 $inputFile에서 지정된 평문 파일을 읽어들여 $outputFile에서 지정된 이름으로 암호화하여 저장합니다.

이제 암호화된 파일은 $outputFile에 저장되며, 복호화할 때는 암호화할 때 사용했던 키와 IV(Initialization Vector) 값을 사용하여 OpenSSL을 이용하여 복호화할 수 있습니다.

마무리

이상으로, PHP를 사용하여 파일을 업로드하고 암호화하는 방법에 대해 알아보았습니다. 파일 업로드와 암호화는 웹 애플리케이션에서 중요한 보안 요소이므로 안전한 코드 작성에 항상 주의해야 합니다. 파일 업로드 시 사용자의 입력값을 신뢰하지 말고 철저한 유효성 검사 및 보안 검토를 거쳐야 합니다. 안전한 웹 애플리케이션 개발에 항상 주의를 기울이도록 합시다.