ホームページ バックエンド開発 PHPチュートリアル PHP での AES 暗号化ファイルの解析 (コード付き)

PHP での AES 暗号化ファイルの解析 (コード付き)

Aug 04, 2018 pm 01:56 PM
暗号化

この記事の内容は、PHP での AES 暗号化ファイルの解析 (コード付き) です。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

AES の概要

Advanced Encryption Standard (AES、Advanced Encryption Standard) は、最も一般的な対称暗号化アルゴリズムです (WeChat アプレットの暗号化送信にはこの暗号化アルゴリズムが使用されます)。対称暗号化アルゴリズムは、暗号化と復号化に同じキーを使用します。

対称暗号化
暗号化と復号化に使用される鍵が同じであるため、非常に高速で、頻繁にデータを送信する場合に適した暗号化方式です。欠点は、キーの送信が面倒なことです。秘密鍵は簡単に漏洩します。

非対称暗号化
暗号化と復号化に使用される鍵は異なります。この暗号化方式は、難しい数学的問題を使用して構築されています。通常、暗号化と復号化の速度は比較的遅いです。時々データを送信するのに適しています。利点は、キー送信が便利であることです。一般的な非対称暗号化アルゴリズムは、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,加密完成!" ;
ログイン後にコピー

2. 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のcurlでのpostモードとgetモードのリクエストコード

thinkphp5 で json オブジェクトを配列に変換する方法 (コード)

以上がPHP での AES 暗号化ファイルの解析 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 で 256 ビット Bitlocker 暗号化を有効にしてセキュリティを強化する Windows 11 で 256 ビット Bitlocker 暗号化を有効にしてセキュリティを強化する Nov 26, 2023 am 11:21 AM

Windows 11 で 256 ビット Bitlocker 暗号化を有効にしてセキュリティを強化する

Win11 暗号化 DNS の詳細なチュートリアル Win11 暗号化 DNS の詳細なチュートリアル Dec 25, 2023 am 10:13 AM

Win11 暗号化 DNS の詳細なチュートリアル

Apple携帯電話でフォトアルバムの暗号化を設定する方法 Apple携帯電話でフォトアルバムの暗号化を設定する方法 Mar 02, 2024 pm 05:31 PM

Apple携帯電話でフォトアルバムの暗号化を設定する方法

Win10 Home Edition はフォルダー暗号化をサポートしていますか? Win10 Home Edition はフォルダー暗号化をサポートしていますか? Jan 09, 2024 am 08:58 AM

Win10 Home Edition はフォルダー暗号化をサポートしていますか?

圧縮せずにフォルダーを暗号化するためのパスワードを設定する方法 圧縮せずにフォルダーを暗号化するためのパスワードを設定する方法 Feb 20, 2024 pm 03:27 PM

圧縮せずにフォルダーを暗号化するためのパスワードを設定する方法

C# における一般的なネットワーク通信とセキュリティの問題と解決策 C# における一般的なネットワーク通信とセキュリティの問題と解決策 Oct 09, 2023 pm 09:21 PM

C# における一般的なネットワーク通信とセキュリティの問題と解決策

PHP 暗号化および復号化関数の完全なリスト: md5、sha1、base64_encode およびその他の関数の安全な適用方法 PHP 暗号化および復号化関数の完全なリスト: md5、sha1、base64_encode およびその他の関数の安全な適用方法 Nov 18, 2023 pm 04:18 PM

PHP 暗号化および復号化関数の完全なリスト: md5、sha1、base64_encode およびその他の関数の安全な適用方法

win11 ファイル暗号化の完全ガイド win11 ファイル暗号化の完全ガイド Jan 09, 2024 pm 02:50 PM

win11 ファイル暗号化の完全ガイド

See all articles