php 对 windows 上的自己的本地私密文件进行加密。
由于经常要使用账号密码这些私密信息太多又难以记住, 所以放到了桌面方便些,但是放到桌面直接打开能看到,感觉非常不安全,因为里面包含服务器,mysql 登录等关键信息。而网上那些加密软件什么的,总感觉有后门,不安心,不放心,于是自己用 php 写了一个加密方法,分享出来给大家,代码如下。
加密代码 encrypt.php
<?php
/**
* Description: 加密重要关键文件, 执行加密会覆盖原文件,一定要做好备份, 一定要记得密码,不记得密码文件将永久丢失
* Use: php encript.php key filename (key 必传入, filename 不传默认为 secret )
*
*/
$key = isset($argv[1]) ? $argv[1] : '';
if(empty($key)) {
echo 'key can not be null';die;
}
$fileName = isset($argv[2]) ? $argv[2] : 'secret.txt';
$file = file_get_contents($fileName);
$file_encrypt = encrypt($file, $key);
file_put_contents($fileName, $file_encrypt);
function encrypt($data, $key)
{
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= $key[$x];
$x++;
}
for ($i = 0; $i < $len; $i++)
{
$str .= chr(ord($data[$i]) + (ord($char[$i])) % 256);
}
return base64_encode($str);
}
?>
解密代码 decript.php
<?php
/**
* Description: 解密重要关键文件
* Use: php encript.php key filename (key 必传入, filename 不传默认为 secret )
*
*/
$key = isset($argv[1]) ? $argv[1] : '';
if(empty($key)) {
echo 'key can not be null';die;
}
$fileName = isset($argv[2]) ? $argv[2] : 'secret.txt';
$file = file_get_contents($fileName);
$file_decrypt = decrypt($file, $key);
file_put_contents($fileName, $file_decrypt);
function decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++)
{
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
{
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}
else
{
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
?>
描述
文件加密后会变成一串可逆的加密的字符串。
使用方法
加密: 加密时时使用以下命令进行加密,会对 filename.txt 进行加密
php encrypt.php yourPassword filename.txt
解密: 加密时时使用以下命令进行加密,会对 filename.txt 进行解密
php encrypt.php yourPassword filename.txt
查看完以后,再执行一次 php encrypt.php yourPassword filename.txt
重新加密即可