本篇文章给大家带来的内容是关于PHP中AES加密文件的解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
aes 简介
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥。
对称加密
加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。秘钥容易泄露。
非对称加密
加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。
注意:
PHP7.2删除了Mcrypt扩展,这里使用OpenSSL扩展。
立即学习“PHP免费学习笔记(深入)”;
<?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中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号