`

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文件代码加密完美运行

    Java类文件加密专家

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

    php文件加密工具phpencode

    php文件加密工具,phpencode 保护程序员知识产权的利器

    最安全简单实用免费的文件加密工具

    最安全简单实用免费的文件加密工具 如果您的电脑经常要被其他人借用或与他人共用电脑,你往往会头疼的就是自己的一些私人文件或不希望别人乱动的重要文件不知放哪好,这时往往会想到用一些软件来加密这些文件。不得...

    一些常见文件加密软件的破解方法

    目前网络上流行非常多目录加密和文件加密的所谓加密软件,非常多都是个人根据开原始码编写的程式,多数都是利用windows技巧实现的(最常见的就是将文件隐藏到回收站,万一你不小心删除了回收站或重装了系统,那就...

    Bring棱镜信息加密重型装甲 文档/文件加密软件单机版 3 0

    7、您是否还在为一些文件无法加密而担忧吗? 8、您是否还在为忘记重要密码而后悔莫及吗? 9、您是否还在为文件的加密强度不够而担忧吗? 国内所有下载站最好用的文件加密软件,文件加密一步搞定,文件自动加 解密,...

    php分页类,加密类,数据库操作类,文件操作类,无限分级类

    php分页类,加密类,数据库操作类,文件操作类,无限分级类,验证类,字符串处理类

    不可破解的文件加密程序

     基本功——首先找一些文件,用程序1和程序2分别进行加密解密试验,从单文件开始,到同时处理几个文件,练习到准确无误。  然后就可以练习下面的内容了:  练习一加密部分  用程序1加密文件A,得到A密文和A密钥...

    加密解密文件 加密 解密

    文件的加密解密,一些流的操作,流的加密....DES;文件的加密解密,一些流的操作,流的加密....DES

    易语言实现大文件加密源码

    情景:当我们有一些几个G的大文件要加密保存时,如果全部加密,则又费时间由费硬盘,因为大文件的加密需要很久,而且加密后的体积会大很多过原文件。源码很简单,这里简单的说一下思路:只加密...Tags:大文件加密。

    隐私文件加密保护器(android手机版)

    通过该软件加密文件后,不管人家怎么翻都不知道你手机上放了什么,是你用手机存放一些保密资料或是不方便让人知道的资料的绝佳选择。未防止别人乱点软件,本软件安装后名称叫“公文加密器”,图标也比较低调,不容易...

    php加密解密功能类.zip

    介绍一个比较齐全的php加密解密功能类。 加密过程: 读取源文件,base64_encode进行加密,利用混排得到的52个大小写字母作为秘钥进行替换 $c=strtr(密文,对应待替换的字母,要替换成的字母); 将两个...

    文件加密箱

    8、本软件是将文件通过加密算法运算后转换成密文,然后重新写回磁盘,这种真正的加密和那些把文件转移隐藏到一些特殊文件夹,而实际上文件在磁盘上还是明文存储的加密方式有本质区别,真正的加密可以从根本上保障您...

    RSA文件加密程序的设计与实现

    本文设计的是一套完整实用的RSA文件加密解决方案,并具体编码实现。本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件...

    php文件加密站点源码

    基于base64的php文件加密站点源码,可以实现搭建网站队php文件加密

    黑刀ZENDA破解PHP文件加密专用

    专业破解加密的PHP文件 乱码变成源码。

    PHP文件加密,SG11扩展安装,phpstudy安装SG11

    主要是针对php文件加密,针对SG11扩展安装,适合想要加密php文件的程序员。 针对sg11扩展安装,phpstudy安装扩展如下: 如下为具体安装流程:https://zhuanlan.zhihu.com/p/531679965

    php7加密文件,文件加密

    php7加密文件

Global site tag (gtag.js) - Google Analytics