首页 > 编程 > PHP > 正文

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

2020-03-22 16:35:31
字体:
来源:转载
供稿:网友

本篇文章给大家带来的内容是关于PHP中AES加密文件的解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

AES 简介

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(html' target='_blank'>微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥。

对称加密
加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。秘钥容易泄露。

非对称加密
加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为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加密文件的解析(附代码)的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表