`

php文件加密类

    博客分类:
  • PHP
 
阅读更多
<?php
/**
 * PHP 文件加密类 二进制加密 
 * 默认32位加密
 *
 * @author ray<ray_phper@163.com>
 * @date   2015-06-11 
 *
 **/ 
 
class PHPFileEncrypt {
 
    /**
     * var $n_iter 
     *
     * 加密位数 32 | 64
     **/ 
 
    private $n_iter;
 
    private $key '0000000000';
 
    public function __construct(){
        //默认32位加密
        $this->setIter(32);
    }
 
    public function setIter($n_iter){
        $this->n_iter = $n_iter;
    }
 
    public function getIter(){
        return $this->n_iter;
    }
 
    /**
     * 加密函数 
     *
     * @access public 
     * @param  mixed $data 要加密的数据 
     * @param  mixed $key  加密秘钥
     * @return string 加密后的数据
     *
     **/ 
 
    public function encrypt($data$key ''){
        if(!$data){
            return '';
        }
        $n $this->_resize($data, 4);
 
        $data_long[0]   = $n;
        $n_data_long    $this->_str2long(1, $data$data_long);
 
        $n count($data_long);
        if (($n & 1) == 1) {
            $data_long[$n] = chr(0);
            $n_data_long++;
        }
 
        $this->_resize($key, 16, true);
        if '' == $key )
            $key $this->key;
 
        $n_key_long $this->_str2long(0, $key$key_long);
 
        $enc_data   '';
        $w          array(0, 0);
        $j          = 0;
        $k          array(0, 0, 0, 0);
        for ($i = 0; $i $n_data_long; ++$i) {
            if ($j + 4 <= $n_key_long) {
                $k[0] = $key_long[$j];
                $k[1] = $key_long[$j + 1];
                $k[2] = $key_long[$j + 2];
                $k[3] = $key_long[$j + 3];
            else {
                $k[0] = $key_long[$j $n_key_long];
                $k[1] = $key_long[($j + 1) % $n_key_long];
                $k[2] = $key_long[($j + 2) % $n_key_long];
                $k[3] = $key_long[($j + 3) % $n_key_long];
            }
            $j = ($j + 4) % $n_key_long;
 
            $this->_encipherLong($data_long[$i], $data_long[++$i], $w$k);
 
            $enc_data .= $this->_long2str($w[0]);
            $enc_data .= $this->_long2str($w[1]);
        }
        return $enc_data;
    }
 
    /**
     * 解密函数  
     *
     * @access public 
     * @param  string  $enc_data 加密过得数据 
     * @param  string  $key      解密秘钥 
     * @return string  原始数据
     **/ 
 
    public function decrypt($enc_data$key ''){
        if(!$enc_data){
            return '';
        }
        $n_enc_data_long $this->_str2long(0, $enc_data$enc_data_long);
 
        $this->_resize($key, 16, true);
        if '' == $key )
            $key $this->key;
 
        $n_key_long $this->_str2long(0, $key$key_long);
 
        $data   '';
        $w      array(0, 0);
        $j      = 0;
        $len    = 0;
        $k      array(0, 0, 0, 0);
        $pos    = 0;
 
        for ($i = 0; $i $n_enc_data_long$i += 2) {
            if ($j + 4 <= $n_key_long) {
                $k[0] = $key_long[$j];
                $k[1] = $key_long[$j + 1];
                $k[2] = $key_long[$j + 2];
                $k[3] = $key_long[$j + 3];
            else {
                $k[0] = $key_long[$j $n_key_long];
                $k[1] = $key_long[($j + 1) % $n_key_long];
                $k[2] = $key_long[($j + 2) % $n_key_long];
                $k[3] = $key_long[($j + 3) % $n_key_long];
            }
            $j = ($j + 4) % $n_key_long;
 
            $this->_decipherLong($enc_data_long[$i], $enc_data_long[$i + 1], $w$k);
 
            if (0 == $i) {
                $len $w[0];
                if (4 <= $len) {
                    $data .= $this->_long2str($w[1]);
                else {
                    $data .= substr($this->_long2str($w[1]), 0, $len % 4);
                }
            else {
                $pos = ($i - 1) * 4;
                if ($pos + 4 <= $len) {
                    $data .= $this->_long2str($w[0]);
 
                    if ($pos + 8 <= $len) {
                        $data .= $this->_long2str($w[1]);
                    elseif ($pos + 4 < $len) {
                        $data .= substr($this->_long2str($w[1]), 0, $len % 4);
                    }
                else {
                    $data .= substr($this->_long2str($w[0]), 0, $len % 4);
                }
            }
        }
        return $data;
    }
 
    private function _encipherLong($y$z, &$w, &$k){
        $sum    = (integer) 0;
        $delta  = 0x9E3779B9;
        $n      = (integer) $this->n_iter;
 
        while ($n-- > 0) {
            $y      $this->_add($y,
                $this->_add($z << 4 ^ $this->_rshift($z, 5), $z) ^
                $this->_add($sum$k[$sum & 3]));
            $sum    $this->_add($sum$delta);
            $z      $this->_add($z,
                $this->_add($y << 4 ^ $this->_rshift($y, 5), $y) ^
                $this->_add($sum$k[$this->_rshift($sum, 11) & 3]));
        }
        $w[0] = $y;
        $w[1] = $z;
    }
 
    private function _decipherLong($y$z, &$w, &$k){
        $sum    = 0xC6EF3720;
        $delta  = 0x9E3779B9;
        $n      = (integer) $this->n_iter;
 
        while ($n-- > 0) {
            $z      $this->_add($z,
                -($this->_add($y << 4 ^ $this->_rshift($y, 5), $y) ^
                $this->_add($sum$k[$this->_rshift($sum, 11) & 3])));
            $sum    $this->_add($sum, -$delta);
            $y      $this->_add($y,
                -($this->_add($z << 4 ^ $this->_rshift($z, 5), $z) ^
                $this->_add($sum$k[$sum & 3])));
        }
 
        $w[0] = $y;
        $w[1] = $z;
    }
 
    private function _resize(&$data$size$nonull = false){
        $n      strlen($data);
        $nmod   $n $size;
        if ( 0 == $nmod )
            $nmod $size;
 
        if ($nmod > 0) {
            if ($nonull) {
                for ($i $n$i $n $nmod $size; ++$i) {
                    $data[$i] = $data[$i $n];
                }
            else {
                for ($i $n$i $n $nmod $size; ++$i) {
                    $data[$i] = chr(0);
                }
            }
        }
        return $n;
    }
 
    private function _hex2bin($str){
        $len strlen($str);
        return pack('H' $len$str);
    }
 
    private function _str2long($start, &$data, &$data_long){
        $n strlen($data);
 
        $tmp    = unpack('N*'$data);
        $j      $start;
 
        foreach ($tmp as $value)
            $data_long[$j++] = $value;
 
        return $j;
    }
 
    private function _long2str($l){
        return pack('N'$l);
    }
 
    private function _rshift($integer$n){
        if (0xffffffff < $integer || -0xffffffff > $integer) {
            $integer fmod($integer, 0xffffffff + 1);
        }
 
        if (0x7fffffff < $integer) {
            $integer -= 0xffffffff + 1.0;
        elseif (-0x80000000 > $integer) {
            $integer += 0xffffffff + 1.0;
        }
 
        if (0 > $integer) {
            $integer &= 0x7fffffff;
            $integer >>= $n;
            $integer |= 1 << (31 - $n);
        else {
            $integer >>= $n;
        }
 
        return $integer;
    }
 
    private function _add($i1$i2){
        $result = 0.0;
 
        foreach (func_get_args() as $value) {
            if (0.0 > $value) {
                $value -= 1.0 + 0xffffffff;
            }
 
            $result += $value;
        }
 
        if (0xffffffff < $result || -0xffffffff > $result) {
            $result fmod($result, 0xffffffff + 1);
        }
 
        if (0x7fffffff < $result) {
            $result -= 0xffffffff + 1.0;
        elseif (-0x80000000 > $result) {
            $result += 0xffffffff + 1.0;
        }
        return $result;
    }
}
 
?>
分享到:
评论

相关推荐

    PHP文件加密软件

    为了保护PHP源代码不被轻易阅读和复制,开发者经常需要对PHP文件进行加密。本文将详细探讨PHP文件加密的相关知识,包括加密的重要性、常见的加密方法、以及如何使用PHP在线加密平台。 首先,PHP文件加密的主要目的...

    新版PHP在线网站文件加密系统源码

    新版PHP在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线...

    PHP文件代码加密完美运行

    本文将深入探讨"PHP文件代码加密完美运行"这一主题,以及相关标签"加密"和"解密"的相关知识点。 1. **代码加密**: - **原因**:源代码加密的主要目的是保护知识产权,防止恶意用户查看、复制或篡改代码,尤其是...

    c++文件加密课程设计

    因此,设计一个功能完备且使用便捷的C++文件加密系统,对于保障信息安全具有重要的实际意义。 本设计旨在利用C++语言开发一个综合性的文件加密系统。这个系统能够采用多种加密算法对文件内容进行加密和解密,增强...

    文件加密程序,包含使用微软加密API制作的文件加密动态链接库和由C制作的程序界面,程序功能模仿Windows优化.rar

    本文将深入探讨由标题和描述中提及的知识点:文件加密和动态链接库在实现这一目标中的应用。 首先,我们来讨论文件加密。文件加密是一种安全措施,通过特定的算法将原始数据转换为看似随机的不可读格式,以防止未经...

    c#对文件加密

    在C#中,可以使用.NET Framework提供的`System.Security.Cryptography`命名空间下的类来实现文件加密。例如,我们可以使用AES类(Aes)来实现对称加密。以下是一个简单的AES加密文件的C#示例: ```csharp using ...

    EXE文件加密9.1(正版)

    这类配置文件通常包含了加密算法的选择、密钥的管理以及一些自定义选项,用户可以根据实际需求进行调整,以达到最佳的加密效果和安全性。 在实际应用中,用户应根据自身软件的特性选择合适的加密级别,以平衡安全性...

    php文件加密工具phpencode

    总的来说,“phpencode”等PHP文件加密工具为开发者提供了一种实用的方法来保护他们的代码,防止未经授权的使用。然而,它并不是万无一失的解决方案,因为技术总是相生相克的,高级的逆向工程技术仍有可能破解加密。...

    文件加密解密系统

    在使用文件加密解密系统时,应遵循一些最佳实践,例如: - 使用强密码:密钥应该足够复杂,包含字母、数字、符号,且长度足够长,以增加破解难度。 - 定期更新密钥:为了应对潜在的密码破解技术进步,定期更换密钥...

    spring配置文件加密实现

    总结来说,Spring配置文件加密实现涉及到以下几个关键步骤: 1. 选择并实现加密算法(如AES)。 2. 使用TE网络技术创建透明加密的文件系统。 3. 自定义或调整Spring的启动流程,使其能够通过加密层读取配置文件。 4...

    文件加密助手(超好用)

    文件加密是信息安全领域中的一个重要环节,它涉及到个人隐私保护、商业机密维护等多个方面。"文件加密助手"是一款专门设计用于文件加密的软件,正如其标题所言,它以便捷和高效为特点,旨在帮助用户轻松地对敏感数据...

    dos下简易文件加密

    在DOS环境下,文件加密是一种保护数据安全的重要手段。标题提到的“dos下简易文件加密”是一个使用位运算实现的简单加密技术,适用于对文本、图片、视频等不同类型的文件进行加解密操作。位运算在计算机科学中是基本...

    Java类文件加密专家

    agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录&gt;\JLoader ...

    文件加密功能源码

    以上就是关于“文件加密功能源码”的一些核心知识点,理解和掌握这些内容有助于开发安全、高效的文件加密系统。通过深入学习和实践,我们可以构建自己的加密解决方案,为数据安全提供可靠保障。

    文件夹加密工具文件加密硬盘文件加密

    在日常使用电脑的过程中,我们经常会遇到需要保护个人隐私或商业机密的情况,这时文件夹加密和文件加密就显得尤为重要。本文将深入探讨“文件夹加密工具”这一主题,包括其功能、工作原理以及如何选择合适的加密软件...

    二进制文件加密

    在实施二进制文件加密时,还需要考虑一些安全策略,如密钥管理。密钥的安全存储和传输至关重要,因为如果密钥丢失或被盗,加密就失去了意义。可以使用密钥管理系统(KMS)来安全地存储和分发密钥,或者采用硬件安全...

    文件加密解密软件(简单好用)

    本文将深入探讨“文件加密解密软件”的基础知识、工作原理以及如何选择和使用这类软件。 首先,让我们理解文件加密的基本概念。文件加密是一种通过特定算法将文件中的数据转化为无法直接读取的形式,这一过程称为...

    易语言文件简易加密

    本文将深入探讨“易语言文件简易加密”的概念、原理以及如何使用易语言实现文件加密。 文件加密是保护数据安全的重要手段,通过加密技术,可以将明文数据转化为密文,只有拥有正确解密密钥的人才能还原成原始内容。...

    手机文件加密文件管理软件

    手机文件加密文件管理软件是一种专为移动设备设计的应用程序,旨在提供安全的文件存储和管理解决方案。在当今数字化时代,个人和企业的数据安全越来越受到重视,尤其是在使用智能手机时,我们经常会存储敏感信息,如...

Global site tag (gtag.js) - Google Analytics