Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan mcrypt PHP dan Alternatif openssl?

Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan mcrypt PHP dan Alternatif openssl?

Linda Hamilton
Linda Hamiltonasal
2024-11-20 11:57:16575semak imbas

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

Menyulitkan dan Menyahsulit Fail dengan mcrypt PHP

Menyulitkan dan menyahsulit fail boleh meningkatkan keselamatan data dan melindungi maklumat sensitif. mcrypt menawarkan perpustakaan yang mudah untuk melaksanakan operasi penyulitan dan penyahsulitan dalam PHP. Walau bagaimanapun, memandangkan mcrypt tidak lagi diselenggara secara aktif, adalah penting untuk mempertimbangkan pilihan alternatif untuk tugas penyulitan.

Dalam artikel ini, kami akan meneroka penggunaan mcrypt untuk menyulitkan dan menyahsulit fail. Kami juga akan memberikan contoh yang dikemas kini menggunakan openssl, alternatif yang disyorkan untuk mcrypt.

Menyulitkan Fail dengan mcrypt:

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 != "." && $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);
    }
}

Menyahsulit Fail dengan mcrypt:

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 != "." && $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);
    }
}

Pilihan Alternatif: Menyulitkan dan Menyahsulit dengan openssl


Penyulitan AES256 kelas
{

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 = 'secretkey';
$iv = AES256Encryption::generateIv();
$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$decryptedText = AES256Encryption::decrypt($encryptedText, $key, $iv);

printf('Teks Asal: %s%s', $text, PHP_EOL);

printf('Encrypted: %s%s', $encryptedText, PHP_EOL);
printf('Decrypted: %s%s', $decryptedText, PHP_EOL);

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyulitkan dan Menyahsulit Fail Menggunakan mcrypt PHP dan Alternatif openssl?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn