在php中加密文件似乎没有任何令人愉快的方法。
内建的php方法mcrypt并不是很可移植,因为大多数服务器都不支持它们。
命令行加密工具就像丑陋的黑客。
字符串是加密的,这很好,但是如果我们想加密一个文件,这对其他人来说没有多大帮助,尤其是对其他人来说。
其他加密工具需要公钥,密钥环,私钥,血样.这些看起来太复杂了,不能只加密一个文件。
看来,我们应该为PHP提供一个简单的函数,其工作方式如下:
$crypt = new Crypt();
$crypt->encryptFile("Password1245!", 'secret_file.txt', 'encrypted_file.txt');
$crypt->decryptFile("Password1245!", 'encrypted_file.txt', 'original_file.txt');
有人有什么想法吗?我要拔头发了!
编辑:我应该添加另一件事,以便最终用户能够轻松地解密文件。
--基本上,我正在寻找可以替换密码保护的压缩文件的东西
发布于 2009-04-29 23:16:29
如果您不介意安装mcrypt扩展名,下面的代码应该这样做:
function Encrypt($string, $key)
{
if (extension_loaded('mcrypt') === true)
{
return base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, substr($key, 0, mcrypt_get_key_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB)), trim($string), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
return false;
}
function Decrypt($string, $key)
{
if (extension_loaded('mcrypt') === true)
{
return trim(mcrypt_decrypt(MCRYPT_BLOWFISH, substr($key, 0, mcrypt_get_key_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB)), base64_decode($string), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
return false;
}
function Encrypt_File($source, $destination, $key)
{
if (extension_loaded('mcrypt') === true)
{
if (is_file($source) === true)
{
$source = file_get_contents($source);
if (file_put_contents($destination, Encrypt($source, $key), LOCK_EX) !== false)
{
return true;
}
}
}
return false;
}
function Decrypt_File($source, $destination, $key)
{
if (extension_loaded('mcrypt') === true)
{
if (is_file($source) === true)
{
$source = file_get_contents($source);
if (file_put_contents($destination, Decrypt($source, $key), LOCK_EX) !== false)
{
return true;
}
}
}
return false;
}
发布于 2009-04-29 23:21:04
简单的xor呢?
function Crypt($source, $key)
{
$rv='';
for($i=0;$i<strlen($source);$i++)
{
$rv.=chr(ord($source[$i]) ^ ord($key[$i%strlen($key)]));
}
return $rv;
}
=>密码( 'aaa‘,’key‘,'key')返回’aaa‘。
编辑:当然,您应该使用
file_put_contents(Crypt(file_get_contents('file'), 'key'));
用于文件read+write :]
https://stackoverflow.com/questions/805686
复制