<?php
class
PHPFileEncrypt {
private
$n_iter
;
private
$key
=
'0000000000'
;
public
function
__construct(){
$this
->setIter(32);
}
public
function
setIter(
$n_iter
){
$this
->n_iter =
$n_iter
;
}
public
function
getIter(){
return
$this
->n_iter;
}
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
;
}
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文件代码加密完美运行
agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...
php文件加密工具,phpencode 保护程序员知识产权的利器
最安全简单实用免费的文件加密工具 如果您的电脑经常要被其他人借用或与他人共用电脑,你往往会头疼的就是自己的一些私人文件或不希望别人乱动的重要文件不知放哪好,这时往往会想到用一些软件来加密这些文件。不得...
目前网络上流行非常多目录加密和文件加密的所谓加密软件,非常多都是个人根据开原始码编写的程式,多数都是利用windows技巧实现的(最常见的就是将文件隐藏到回收站,万一你不小心删除了回收站或重装了系统,那就...
7、您是否还在为一些文件无法加密而担忧吗? 8、您是否还在为忘记重要密码而后悔莫及吗? 9、您是否还在为文件的加密强度不够而担忧吗? 国内所有下载站最好用的文件加密软件,文件加密一步搞定,文件自动加 解密,...
php分页类,加密类,数据库操作类,文件操作类,无限分级类,验证类,字符串处理类
基本功——首先找一些文件,用程序1和程序2分别进行加密解密试验,从单文件开始,到同时处理几个文件,练习到准确无误。 然后就可以练习下面的内容了: 练习一加密部分 用程序1加密文件A,得到A密文和A密钥...
文件的加密解密,一些流的操作,流的加密....DES;文件的加密解密,一些流的操作,流的加密....DES
情景:当我们有一些几个G的大文件要加密保存时,如果全部加密,则又费时间由费硬盘,因为大文件的加密需要很久,而且加密后的体积会大很多过原文件。源码很简单,这里简单的说一下思路:只加密...Tags:大文件加密。
通过该软件加密文件后,不管人家怎么翻都不知道你手机上放了什么,是你用手机存放一些保密资料或是不方便让人知道的资料的绝佳选择。未防止别人乱点软件,本软件安装后名称叫“公文加密器”,图标也比较低调,不容易...
介绍一个比较齐全的php加密解密功能类。 加密过程: 读取源文件,base64_encode进行加密,利用混排得到的52个大小写字母作为秘钥进行替换 $c=strtr(密文,对应待替换的字母,要替换成的字母); 将两个...
8、本软件是将文件通过加密算法运算后转换成密文,然后重新写回磁盘,这种真正的加密和那些把文件转移隐藏到一些特殊文件夹,而实际上文件在磁盘上还是明文存储的加密方式有本质区别,真正的加密可以从根本上保障您...
本文设计的是一套完整实用的RSA文件加密解决方案,并具体编码实现。本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件...
基于base64的php文件加密站点源码,可以实现搭建网站队php文件加密
专业破解加密的PHP文件 乱码变成源码。
主要是针对php文件加密,针对SG11扩展安装,适合想要加密php文件的程序员。 针对sg11扩展安装,phpstudy安装扩展如下: 如下为具体安装流程:https://zhuanlan.zhihu.com/p/531679965
php7加密文件