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('~!@#$%&*()-=+{};:"<>,.?/\'') ) ); $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); }
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!