無需裝擴(kuò)展,也無需花錢,就用PHP源碼加密你的文件,內(nèi)網(wǎng)離線可用,別人改不動,只有你能改。
以laravel框架app/Http/Controllers/UserController.php文件示例:
1.生成密鑰
php -r "echo base64_encode(random_bytes(32));"
2.加密腳本
app同級目錄創(chuàng)建文件: encrypt.php
//填充內(nèi)容
<?php
$key = base64_decode('24ndU8………'); //剛剛生成的密鑰
$src = file_get_contents('./app/Http/Controllers/UserController.php'); //文件的路徑
$compressed = gzcompress($src, 9);
$iv = substr($key, 0, 16);
$cipher = openssl_encrypt($compressed, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
file_put_contents(
'./app/Http/Controllers/UserController.php.enc', //加密的文件
'<?php ' . base64_encode($cipher)
);
3.執(zhí)行加密腳本
php encrypt.php
4.制作「加載器」
//創(chuàng)建一個文件,制作加載器,運行加密的文件
<?php
$key = base64_decode('24ndU8………'); //相同的密鑰
$raw = file_get_contents(__DIR__ . '/UserController.php.enc');
$cipher = base64_decode(substr($raw, 6));
$iv = substr($key, 0, 16);
$dec = openssl_decrypt($cipher, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
$code = gzuncompress($dec);
if ($code === false) abort(500, 'Controller corrupted');
eval('?>' . $code);
5.后續(xù)升級
- 本地改好原文件
- 再跑 php encrypt.php
- 只替換 .php.enc 文件即可上線
以上方法需要更改加密的文件,太繁瑣了,我們可以在加密腳本的時候傳入需要加密的文件即可,將加密腳本修改一下
<?php
if ($argc !== 2) {
echo "用法: php encrypt.php <文件路徑>\n";
exit(1);
}
$inFile = realpath($argv[1]);
if (!is_file($inFile)) {
echo "文件不存在: {$argv[1]}\n";
exit(1);
}
$key = base64_decode('24ndU8………');
$src = file_get_contents($inFile);
$compressed = gzcompress($src, 9);
$iv = substr($key, 0, 16);
$cipher = openssl_encrypt($compressed, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
file_put_contents(
$inFile . '.enc',
'<?php ' . base64_encode($cipher)
);
//執(zhí)行
php encrypt.php app/Http/Controllers/UserController.php