PHP中AES加密檔案的解析(附代碼)

來源:互聯網
上載者:User

本篇文章給大家帶來的內容是關於PHP中AES加密檔案的解析(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

AES 簡介

進階加密標準(AES,Advanced Encryption Standard)為最常見的對稱式加密演算法(小程式加密傳輸就是用這個密碼編譯演算法的)。對稱式加密演算法也就是加密和解密用相同的密鑰。

對稱式加密
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送資料的場合。缺點是密鑰的傳輸比較麻煩。秘鑰容易泄露。

非對稱式加密
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送資料的場合。優點是密鑰傳輸方便。常見的非對稱式加密演算法為RSA、ECC和EIGamal。

注意:
PHP7.2刪除了Mcrypt擴充,這裡使用OpenSSL擴充。

<?php /** AES 演算法    */class Aes {    private $hex_iv = '00000000000000000000000000000000';     private $key = '397e2eb61307109f6e68006ebcb62f98';        function __construct($key) {        $this->key = $key;                $this->key = hash('sha256', $this->key, true);    }    /*    * 字串加密 不寫入檔案     */    public function encrypt($input)    {        $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));                $data = base64_encode($data);                return $data;    }    /*    * aes 給PHP檔案加密    * 寫入設定檔案    */    public function filecrypt($filename)    {        $type=strtolower(substr(strrchr($filename,'.'),1));                    if ('php' == $type && is_file($filename) && is_writable($filename)) {                   $contents = file_get_contents($filename);                                  // echo $contents;exit;                   $contents = php_strip_whitespace($filename);                                  // echo $contents;exit;                 // $headerPos = strpos($contents,'<?php');                 // echo $headerPos;exit;                 // $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);                 // echo $contents;                 exit;                 $data = openssl_encrypt($contents, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));                                  // echo $data;exit;                 $data = base64_encode($data);                                  // echo $data;exit;                 return file_put_contents($filename, $data);              }                   return false;      }    /*    * 字串解密    */    public function decrypt($input)    {        $decrypted = openssl_decrypt(base64_decode($input), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));                return $decrypted;    }    /*      For PKCS7 padding     */    private function addpadding($string, $blocksize = 16) {        $len = strlen($string);                $pad = $blocksize - ($len % $blocksize);                $string .= str_repeat(chr($pad), $pad);                return $string;    }    private function strippadding($string) {        $slast = ord(substr($string, -1));                $slastc = chr($slast);                $pcheck = substr($string, -$slast);                if (preg_match("/$slastc{" . $slast . "}/", $string)) {                    $string = substr($string, 0, strlen($string) - $slast);                    return $string;        } else {                    return false;        }    }        function hexToStr($hex)    {        $string='';                for ($i=0; $i < strlen($hex)-1; $i+=2)        {                    $string .= chr(hexdec($hex[$i].$hex[$i+1]));        }                return $string;    }}$key = '397e2eb61307109f6e68006ebcb62f98';$aes = new Aes($key);$filename = __DIR__.'\exchange.php';// $filename = 'Y6RCuF6ETPC5J57hfhxovg==';// 加密$string = $aes->filecrypt($filename);// echo $string;echo "OK,加密完成!" ;

二、簡單函數加密PHP檔案

<?php   function encode_file_contents($filename) {       $type=strtolower(substr(strrchr($filename,'.'),1));       if ('php' == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP檔案 並且可寫 則進行壓縮編碼           $contents = file_get_contents($filename); // 判斷檔案是否已經被編碼處理           $contents = php_strip_whitespace($filename);            // 去除PHP頭部和尾部標識           $headerPos = strpos($contents,'<?php');           $footerPos = strrpos($contents,'?>');           $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);           $encode = base64_encode(gzdeflate($contents)); // 開始編碼           $encode = '<?php'."\n eval(gzinflate(base64_decode("."'".$encode."'".")));\n\n?>";            return file_put_contents($filename, $encode);       }       return false;   }    //調用函數 // echo __DIR__.'\server.php';    $filename = __DIR__.'\server.php';   encode_file_contents($filename);   echo "OK,加密完成!" ;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.