首頁 後端開發 php教程 PHP中AES加密檔案的解析(附程式碼)

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

Aug 04, 2018 pm 01:56 PM
加密

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

AES 簡介

高級加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密演算法(微信小程式加密傳輸就是用這個加密演算法的) 。對稱加密演算法也就是加密和解密用相同的金鑰。

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

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

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

<?php /*
* AES 算法    
*/class Aes {

    private $hex_iv = &#39;00000000000000000000000000000000&#39;; 

    private $key = &#39;397e2eb61307109f6e68006ebcb62f98&#39;;    
    function __construct($key) {
        $this->key = $key;        
        $this->key = hash(&#39;sha256&#39;, $this->key, true);
    }    /*
    * 字符串加密 不写入文件 
    */
    public function encrypt($input)
    {
        $data = openssl_encrypt($input, &#39;AES-256-CBC&#39;, $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,&#39;.&#39;),1));            
        if (&#39;php&#39; == $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,&#39;<?php&#39;);
                 // echo $headerPos;exit;


                 // $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);
                 // echo $contents;
                 exit;
                 $data = openssl_encrypt($contents, &#39;AES-256-CBC&#39;, $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), &#39;AES-256-CBC&#39;, $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=&#39;&#39;;        
        for ($i=0; $i < strlen($hex)-1; $i+=2)

        {            
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));

        }        
        return $string;
    }

}
$key = &#39;397e2eb61307109f6e68006ebcb62f98&#39;;
$aes = new Aes($key);
$filename = __DIR__.&#39;\exchange.php&#39;;
// $filename = &#39;Y6RCuF6ETPC5J57hfhxovg==&#39;;
// 加密
$string = $aes->filecrypt($filename);
// echo $string;
echo "OK,加密完成!" ;
登入後複製

二、簡單函數加密PHP檔案

<?php  

 function encode_file_contents($filename) {  
     $type=strtolower(substr(strrchr($filename,&#39;.&#39;),1));  
     if (&#39;php&#39; == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码  
         $contents = file_get_contents($filename); // 判断文件是否已经被编码处理  
         $contents = php_strip_whitespace($filename);   

         // 去除PHP头部和尾部标识  
         $headerPos = strpos($contents,&#39;<?php&#39;);  
         $footerPos = strrpos($contents,&#39;?>&#39;);  
         $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);  
         $encode = base64_encode(gzdeflate($contents)); // 开始编码  
         $encode = &#39;<?php&#39;."\n eval(gzinflate(base64_decode("."&#39;".$encode."&#39;".")));\n\n?>";   

         return file_put_contents($filename, $encode);  
     }  
     return false;  
 }   

 //调用函数
 // echo __DIR__.&#39;\server.php&#39;;   
 $filename = __DIR__.&#39;\server.php&#39;;  
 encode_file_contents($filename);  
 echo "OK,加密完成!" ;
登入後複製

相關文章推薦:

php的curl中post方式和get方式的請求代碼

thinkphp5中如何把json物件轉換為陣列(程式碼)

以上是PHP中AES加密檔案的解析(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在 Windows 11 上啟用 256 位元 Bitlocker 加密以提高安全性 在 Windows 11 上啟用 256 位元 Bitlocker 加密以提高安全性 Nov 26, 2023 am 11:21 AM

Bitlocker是Windows作業系統的預設加密技術。它在Windows上被廣泛使用,但一些用戶更喜歡第三方解決方案,例如VeraCrypt。 Bitlocker的許多用戶不知道的是,它預設為128位元加密,即使256位元也可用。無需過多地介紹差異的細節;AES128位元和256位元加密之間的核心區別在於安全密鑰的長度。更長的密鑰使暴力攻擊更加困難。雖然預設為128位,但即使是Microsoft也建議使用256位來提高安全性。問題是,大多數用戶可能不知道較弱的預設值或如何進行更改。首先,您可能想知道W

win11加密dns詳細教學 win11加密dns詳細教學 Dec 25, 2023 am 10:13 AM

先前微軟為win11提供了dns加密服務,但不少用戶不知道win11加密dns怎麼使用,其實我們只需要打開網路設定下的dns設定。 win11加密dns詳細教學:1、先進入磁碟,找到想要加密的資料夾。 2.接著開啟右側的「乙太網路」3、然後再下方找到DNS伺服器分配,點選「編輯」4、將其中的「自動(DHCP)」改為「手動」後,開啟下方「IPv4」5、開啟後,在首選DNS中輸入“8.8.8.8”6、然後將首選DNS加密改為“僅加密(通過HTTPS的DNS)”7、更改完成後點擊“保存”,就可以發現

Win10家用版支援資料夾加密功能嗎? Win10家用版支援資料夾加密功能嗎? Jan 09, 2024 am 08:58 AM

文件加密,旨在對資料實施專業級別的加密從而更有效地確保資料的安全性!僅掌握了正確加密金鑰方可執行解密操作,實質保障資訊資產安全。然而,Win10家庭版檔案加密功能尚不具備此項特性。 win10家庭版能加密資料夾嗎答:win10家庭版不能加密資料夾。 Windows系統加密檔案的教學1、在想要加密的檔案或資料夾上使用右鍵操作(或長按一段時間),接下來請選取「屬性」功能。 2.在展開的新介面中,尋找「進階」選項,點選進入後,記得勾選位於下方「加密內容以保護資料」選項。 3、設定完成後,點選「確定」來

蘋果手機相簿加密怎麼設定 蘋果手機相簿加密怎麼設定 Mar 02, 2024 pm 05:31 PM

在蘋果手機中,用戶可以根據自己的需求來加密相簿。有些用戶並不清楚該怎麼設定。可以將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可,接下來就是小編為用戶帶來的手機相簿加密設定方法的介紹,有興趣的用戶快來一起看看吧!蘋果手機使用教學蘋果手機相簿加密怎麼設定答:將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可詳情介紹:1、進入相冊,選擇需要加密的圖片,再點擊下方的【新增到】。 2、選擇【加入備忘錄】。 3.進入備忘錄,找到剛更創建的備忘錄,進入,點選右上角的【傳送】圖示。 4.點選下方的【鎖定備

C#常見的網路通訊與安全性問題及解決方法 C#常見的網路通訊與安全性問題及解決方法 Oct 09, 2023 pm 09:21 PM

C#中常見的網路通訊和安全性問題及解決方法在當今互聯網時代,網路通訊已成為了軟體開發中必不可少的一部分。在C#中,我們通常會遇到一些網路通訊的問題,例如資料傳輸的安全性、網路連線的穩定性等。本文將針對C#中常見的網路通訊和安全性問題進行詳細討論,並提供相應的解決方法和程式碼範例。一、網路通訊問題網路連線中斷:網路通訊過程中,可能會出現網路連線的中斷,這會導致

資料夾加密如何設定密碼不壓縮 資料夾加密如何設定密碼不壓縮 Feb 20, 2024 pm 03:27 PM

資料夾加密是一種常見的資料保護方法,它可以將資料夾中的內容加密,使得只有掌握解密密碼的人能夠存取其中的檔案。在進行資料夾加密時,有一些常見的方法可以用來設定密碼,而不需要壓縮檔案。首先,我們可以使用作業系統自帶的加密功能來設定資料夾密碼。對於Windows使用者來說,可以透過以下步驟來設定:選擇要加密的資料夾,滑鼠右鍵點選資料夾,選擇「屬性」選

win11文件加密完整指南 win11文件加密完整指南 Jan 09, 2024 pm 02:50 PM

有的朋友想要保護自己的文件,但不知道win11文件怎麼加密,其實我們可以直接使用資料夾加密也可以用第三方軟體加密文件。 win11文件加密詳細教學:1、先找到想要加密的文件,右鍵選中,開啟「屬性」2、接著點擊屬性一欄的「高級」3、在高級中選擇「加密內容以便保護資料」並點選「確定」4、然後點選「確定」儲存。 5.最後選擇想要的加密模式並「確定」儲存即可加密文件了。

winrar怎麼加密壓縮包-winrar加密壓縮包方法 winrar怎麼加密壓縮包-winrar加密壓縮包方法 Mar 23, 2024 pm 12:10 PM

小編將為大家介紹加密壓縮的三種方法:方法一:加密最簡單的加密方法,就是在加密檔案時輸入想要設定的密碼,完成加密和壓縮了。方法二:自動加密普通的加密方式,需要我們加密每個檔案的時候都需要輸入密碼,如果你想要加密大量壓縮包,並且密碼是一樣的話,那麼我們可以在WinRAR中設定自動加密,之後只要正常壓縮文件,WinRAR會為每個壓縮包添加密碼。方法如下:開啟WinRAR,點選選項–設定設定介面中,切換到【壓縮】,點選建立預設設定–設定密碼在這裡輸入我們想要設定的密碼,點選確定就完成設定了,我們只需要正

See all articles