PHP中AES加密檔案的解析(附程式碼)
這篇文章帶給大家的內容是關於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,加密完成!" ;
相關文章推薦:
以上是PHP中AES加密檔案的解析(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

先前微軟為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家庭版能加密資料夾嗎答:win10家庭版不能加密資料夾。 Windows系統加密檔案的教學1、在想要加密的檔案或資料夾上使用右鍵操作(或長按一段時間),接下來請選取「屬性」功能。 2.在展開的新介面中,尋找「進階」選項,點選進入後,記得勾選位於下方「加密內容以保護資料」選項。 3、設定完成後,點選「確定」來

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

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

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

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

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