首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Php文件加密方法。有简单的东西存在吗?

Php文件加密方法。有简单的东西存在吗?
EN

Stack Overflow用户
提问于 2009-04-30 06:56:55
回答 4查看 8.2K关注 0票数 7

在php中加密文件似乎没有任何令人愉快的方法。

内建的php方法mcrypt并不是很可移植,因为大多数服务器都不支持它们。

命令行加密工具就像丑陋的黑客。

字符串是加密的,这很好,但是如果我们想加密一个文件,这对其他人来说没有多大帮助,尤其是对其他人来说。

其他加密工具需要公钥,密钥环,私钥,血样.这些看起来太复杂了,不能只加密一个文件。

看来,我们应该为PHP提供一个简单的函数,其工作方式如下:

代码语言:javascript
运行
复制
$crypt = new Crypt();
$crypt->encryptFile("Password1245!", 'secret_file.txt', 'encrypted_file.txt');
$crypt->decryptFile("Password1245!", 'encrypted_file.txt', 'original_file.txt');

有人有什么想法吗?我要拔头发了!

编辑:我应该添加另一件事,以便最终用户能够轻松地解密文件。

--基本上,我正在寻找可以替换密码保护的压缩文件的东西

EN

回答 4

Stack Overflow用户

发布于 2009-04-30 07:02:40

看一看PEAR加密包。他们并不都依赖于mcrypt --比如河豚

票数 6
EN

Stack Overflow用户

发布于 2009-04-30 07:16:29

如果您不介意安装mcrypt扩展名,下面的代码应该这样做:

代码语言:javascript
运行
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2009-04-30 07:21:04

简单的xor呢?

代码语言:javascript
运行
复制
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‘。

编辑:当然,您应该使用

代码语言:javascript
运行
复制
file_put_contents(Crypt(file_get_contents('file'), 'key'));

用于文件read+write :]

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/805686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档