>백엔드 개발 >PHP 튜토리얼 >PHP의 mcrypt 및 openssl 대안을 사용하여 파일을 어떻게 암호화하고 해독할 수 있습니까?

PHP의 mcrypt 및 openssl 대안을 사용하여 파일을 어떻게 암호화하고 해독할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-20 11:57:16575검색

How Can I Encrypt and Decrypt Files Using PHP's mcrypt and the openssl Alternative?

PHP의 mcrypt를 사용한 파일 암호화 및 복호화

파일 암호화 및 복호화는 데이터 보안을 강화하고 중요한 정보를 보호할 수 있습니다. mcrypt는 PHP에서 암호화 및 암호 해독 작업을 구현하기 위한 편리한 라이브러리를 제공합니다. 그러나 mcrypt는 더 이상 적극적으로 유지 관리되지 않으므로 암호화 작업에 대한 대체 옵션을 고려하는 것이 중요합니다.

이 기사에서는 mcrypt를 사용하여 파일을 암호화하고 해독하는 방법을 살펴보겠습니다. 또한 mcrypt의 권장 대안인 openssl을 활용하는 업데이트된 예도 제공할 예정입니다.

다음으로 파일 암호화 mcrypt:

</p>
<pre class="brush:php;toolbar:false">function encryptFile() {
    global $cryptastic;
    $pass = PGPPASS;
    $salt = PGPSALT;
    $key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");

    if ($handle = opendir(PATH.'/ftpd')) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." &amp;&amp; $file != "..") {
                $newfile = PATH.'/encrypted/'.$file.'.txt';
                $msg = file_get_contents(PATH.'/ftpd/'.$file);
                $encrypted = $cryptastic->encrypt($msg, $key) or die("Failed to complete encryption.");
                $nfile = fopen($newfile, 'w');
                fwrite($nfile, $encrypted);
                fclose($nfile);
                unlink(PATH.'/ftpd/'.$file);

            }
        }
        closedir($handle);
    }
}

다음을 사용하여 파일 암호 해독 mcrypt:

</p>
<pre class="brush:php;toolbar:false">function inFTP() {
    global $cryptastic;
    $pass = PGPPASS;
    $salt = PGPSALT;
    $key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");

    if ($handle = opendir(PATH.'/encrypted')) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." &amp;&amp; $file != "..") {
                $newfile = PATH.'/decrypted/'.$file;
                $msg = PATH.'/encrypted/'.$file;
                $decrypted = $cryptastic->decrypt($msg, $key) or die("Failed to complete decryption.");
                $nfile = fopen($newfile, 'w');
                fwrite($nfile, $decrypted);
                fclose($nfile);
                //unlink(PATH.'/encrypted/'.$file);

            }
        }
        closedir($handle);
    }
}

대체 옵션: 다음을 사용하여 암호화 및 복호화 openssl


클래스 AES256암호화
{

public const BLOCK_SIZE = 8;
public const IV_LENGTH = 16;
public const CIPHER = 'AES256';

public static function generateIv(bool $allowLessSecure = false): string
{
    $success = false;
    $random = openssl_random_pseudo_bytes(openssl_cipher_iv_length(static::CIPHER));
    if (!$success) {
        if (function_exists('sodium_randombytes_random16')) {
            $random = sodium_randombytes_random16();
        } else {
            try {
                $random = random_bytes(static::IV_LENGTH);
            }
            catch (Exception $e) {
                if ($allowLessSecure) {
                    $permitted_chars = implode(
                        '',
                        array_merge(
                            range('A', 'z'),
                            range(0, 9),
                            str_split('~!@#$%&amp;*()-=+{};:"<>,.?/\'')
                        )
                    );
                    $random = '';
                    for ($i = 0; $i < static::IV_LENGTH; $i++) {
                        $random .= $permitted_chars[mt_rand(0, (static::IV_LENGTH) - 1)];
                    }
                }
                else {
                    throw new RuntimeException('Unable to generate initialization vector (IV)');
                }
            }
        }
    }
    return $random;
}

protected static function getPaddedText(string $plainText): string
{
    $stringLength = strlen($plainText);
    if ($stringLength % static::BLOCK_SIZE) {
        $plainText = str_pad($plainText, $stringLength + static::BLOCK_SIZE - $stringLength % static::BLOCK_SIZE, "<🎝🎝🎝>");
    }
    return $plainText;
}

public static function encrypt(string $plainText, string $key, string $iv): string
{
    $plainText = static::getPaddedText($plainText);
    return base64_encode(openssl_encrypt($plainText, static::CIPHER, $key, OPENSSL_RAW_DATA, $iv));
}

public static function decrypt(string $encryptedText, string $key, string $iv): string
{
    return openssl_decrypt(base64_decode($encryptedText), static::CIPHER, $key, OPENSSL_RAW_DATA, $iv);
}

}

$text = '8SViI0Gz4r-p7A15YxkwjOBFuW*@NTtbm{U]D&E=~6yLM adX'P;h3$,KJ%/eo>}$key = '비밀키';
$iv = AES256Encryption::generateIv();
$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$decryptedText = AES256Encryption::decrypt($encryptedText, $key, $iv);

printf('원본 텍스트: %s%s', $text, PHP_EOL);
printf('암호화됨: %s%s', $encryptedText, PHP_EOL);
printf('복호화됨: %s%s', $decryptedText, PHP_EOL);
< ;/pre>

위 내용은 PHP의 mcrypt 및 openssl 대안을 사용하여 파일을 어떻게 암호화하고 해독할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.