PHP中AES加密文件的解析(附代码)

Posted on

本篇文章给大家带来的内容是关于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的curl中post方式和get方式的请求代码

thinkphp5中如何把json对象转换为数组(代码)

以上就是PHP中AES加密文件的解析(附代码)的详细内容,更多请关注清酒竹杯其它相关文章!

  • 相关标签:加密
  • 本文原创发布清酒竹杯 ,转载请注明出处,感谢您的尊重!
  • Leave a Reply

    Your email address will not be published. Required fields are marked *