<?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在线网站文件加密系统源码新版PHP在线网站文件加密系统源码新版PHP在线...
本文将深入探讨"PHP文件代码加密完美运行"这一主题,以及相关标签"加密"和"解密"的相关知识点。 1. **代码加密**: - **原因**:源代码加密的主要目的是保护知识产权,防止恶意用户查看、复制或篡改代码,尤其是...
因此,设计一个功能完备且使用便捷的C++文件加密系统,对于保障信息安全具有重要的实际意义。 本设计旨在利用C++语言开发一个综合性的文件加密系统。这个系统能够采用多种加密算法对文件内容进行加密和解密,增强...
本文将深入探讨由标题和描述中提及的知识点:文件加密和动态链接库在实现这一目标中的应用。 首先,我们来讨论文件加密。文件加密是一种安全措施,通过特定的算法将原始数据转换为看似随机的不可读格式,以防止未经...
在C#中,可以使用.NET Framework提供的`System.Security.Cryptography`命名空间下的类来实现文件加密。例如,我们可以使用AES类(Aes)来实现对称加密。以下是一个简单的AES加密文件的C#示例: ```csharp using ...
这类配置文件通常包含了加密算法的选择、密钥的管理以及一些自定义选项,用户可以根据实际需求进行调整,以达到最佳的加密效果和安全性。 在实际应用中,用户应根据自身软件的特性选择合适的加密级别,以平衡安全性...
总的来说,“phpencode”等PHP文件加密工具为开发者提供了一种实用的方法来保护他们的代码,防止未经授权的使用。然而,它并不是万无一失的解决方案,因为技术总是相生相克的,高级的逆向工程技术仍有可能破解加密。...
在使用文件加密解密系统时,应遵循一些最佳实践,例如: - 使用强密码:密钥应该足够复杂,包含字母、数字、符号,且长度足够长,以增加破解难度。 - 定期更新密钥:为了应对潜在的密码破解技术进步,定期更换密钥...
总结来说,Spring配置文件加密实现涉及到以下几个关键步骤: 1. 选择并实现加密算法(如AES)。 2. 使用TE网络技术创建透明加密的文件系统。 3. 自定义或调整Spring的启动流程,使其能够通过加密层读取配置文件。 4...
文件加密是信息安全领域中的一个重要环节,它涉及到个人隐私保护、商业机密维护等多个方面。"文件加密助手"是一款专门设计用于文件加密的软件,正如其标题所言,它以便捷和高效为特点,旨在帮助用户轻松地对敏感数据...
在DOS环境下,文件加密是一种保护数据安全的重要手段。标题提到的“dos下简易文件加密”是一个使用位运算实现的简单加密技术,适用于对文本、图片、视频等不同类型的文件进行加解密操作。位运算在计算机科学中是基本...
agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...
以上就是关于“文件加密功能源码”的一些核心知识点,理解和掌握这些内容有助于开发安全、高效的文件加密系统。通过深入学习和实践,我们可以构建自己的加密解决方案,为数据安全提供可靠保障。
在日常使用电脑的过程中,我们经常会遇到需要保护个人隐私或商业机密的情况,这时文件夹加密和文件加密就显得尤为重要。本文将深入探讨“文件夹加密工具”这一主题,包括其功能、工作原理以及如何选择合适的加密软件...
在实施二进制文件加密时,还需要考虑一些安全策略,如密钥管理。密钥的安全存储和传输至关重要,因为如果密钥丢失或被盗,加密就失去了意义。可以使用密钥管理系统(KMS)来安全地存储和分发密钥,或者采用硬件安全...
本文将深入探讨“文件加密解密软件”的基础知识、工作原理以及如何选择和使用这类软件。 首先,让我们理解文件加密的基本概念。文件加密是一种通过特定算法将文件中的数据转化为无法直接读取的形式,这一过程称为...
本文将深入探讨“易语言文件简易加密”的概念、原理以及如何使用易语言实现文件加密。 文件加密是保护数据安全的重要手段,通过加密技术,可以将明文数据转化为密文,只有拥有正确解密密钥的人才能还原成原始内容。...
手机文件加密文件管理软件是一种专为移动设备设计的应用程序,旨在提供安全的文件存储和管理解决方案。在当今数字化时代,个人和企业的数据安全越来越受到重视,尤其是在使用智能手机时,我们经常会存储敏感信息,如...