- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章基于php实现的php代码加密解密类完整实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了基于php实现的php代码加密解密类。分享给大家供大家参考,具体如下:
php 代码加密类,大家可以根据自己的需求进行修改,原类如下,该实例在ubuntu下测试没有问题.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
<?php
class
Encryption{
private
$c
=
''
;
//存储密文
private
$s
=
''
,
$q1
,
$q2
,
$q3
,
$q4
,
$q5
,
$q6
;
//存储生成的加密后的文件内容
//如果不设置一个值,isset会表示不存在;
private
$file
=
''
;
//读取文件的路径
private
$source
=
''
,
$target
=
''
;
//构造函数,实例化时调用初始化全局变量;
public
function
__construct(){
//初始化全局变量
$this
->initialVar();
//echo "hello \n";
}
/*
*@input $property_name,$value
*@output
* 魔法方法,对变量进行设置值;可根据需求进行处理。若直接去除if判断表示可用设置任何属性的值,包括不存在的属性;
*/
public
function
__set(
$property_name
,
$value
){
//定义过的变量;
if
(isset(
$this
->
$property_name
)){
$this
->
$property_name
=
$value
;
}
else
{
//异常处理,处理未声明的变量赋值;可根据需求进行处理。
throw
new
Exception(
"property does not exist"
);
}
}
//魔法方法 取出变量的值;
public
function
__get(
$property_name
){
if
(isset(
$this
->
$property_name
)){
return
$this
->
$property_name
;
}
else
{
//throw new Exception("property does not exist");
return
NULL;
}
}
//取随机排序
private
function
RandAbc(
$length
=
""
){
//随机排序取回
$str
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
;
return
str_shuffle
(
$str
);
}
//对明文内容进行加密处理
private
function
ciphertext(
$filename
){
//$filename='index.php';
$T_k1
=
$this
->RandAbc();
$T_k2
=
$this
->RandAbc();
$vstr
=
file_get_contents
(
$filename
);
$v1
=
base64_encode
(
$vstr
);
$c
=
strtr
(
$v1
,
$T_k1
,
$T_k2
);
$this
->c=
$T_k1
.
$T_k2
.
$c
;
return
$this
;
}
//初始化变量
private
function
initialVar(){
$this
->q1=
"O00O0O"
;
//base64_decode
$this
->q2=
"O0O000"
;
//$c(原文经过strtr置换后的密文,由 目标字符+替换字符+base64_encode(‘原文内容')构成)
$this
->q3=
"O0OO00"
;
//strtr
$this
->q4=
"OO0O00"
;
//substr
$this
->q5=
"OO0000"
;
//52
$this
->q6=
"O00OO0"
;
//urldecode解析过的字符串(n1zb/ma5\vt0i28-pxuqy*6%6Crkdg9_ehcswo4+f37j)
}
//生成加密后的模板(复杂版本);
private
function
model(){
//$c = $this->c;
//$this->initialVar();
$this
->s=
'<?php $'
.
$this
->q6.
'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'
.
$this
->q1.
'=$'
.
$this
->q6.
'{3}.$'
.
$this
->q6.
'{6}.$'
.
$this
->q6.
'{33}.$'
.
$this
->q6.
'{30};$'
.
$this
->q3.
'=$'
.
$this
->q6.
'{33}.$'
.
$this
->q6.
'{10}.$'
.
$this
->q6.
'{24}.$'
.
$this
->q6.
'{10}.$'
.
$this
->q6.
'{24};$'
.
$this
->q4.
'=$'
.
$this
->q3.
'{0}.$'
.
$this
->q6.
'{18}.$'
.
$this
->q6.
'{3}.$'
.
$this
->q3.'{0}
.$
'.$this->q3.'
{1}.$
'.$this->q6.'
{24};$
'.$this->q5.'
=$
'.$this->q6.'
{7}.$
'.$this->q6.'
{13};$
'.$this->q1.'
.=$
'.$this->q6.'
{22}.$
'.$this->q6.'
{36}
.$
'.$this->q6.'
{29}.$
'.$this->q6.'
{26}.$
'.$this->q6.'
{30}.$
'.$this->q6.'
{32}.$
'.$this->q6.'
{35}.$
'.$this->q6.'
{26}.$
'.$this->q6.'
{30};
eval
($
'.$this->q1.'
(
"'.base64_encode('$'.$this->q2.'="
'.$this->c.'
";
eval
(\
'?>\'.$'
.
$this
->q1.
'($'
.
$this
->q3.
'($'
.
$this
->q4.
'($'
.
$this
->q2.
',$'
.
$this
->q5.
'*2),$'
.
$this
->q4.
'($'
.
$this
->q2.
',$'
.
$this
->q5.
',$'
.
$this
->q5.'),
$
'.$this->q4.'
($
'.$this->q2.'
,0,$
'.$this->q5.'
))));
').'
"));?>';
return
$this
;
}
//创建加密文件
private
function
build(
$target
){
//$this->encodes("./index.php");
//$this->model();
$fpp1
=
fopen
(
$target
,
'w'
);
fwrite(
$fpp1
,
$this
->s)
or
die
(
'写入是失败!'
);
fclose(
$fpp1
);
return
$this
;
}
//加密处理 连贯操作
public
function
encode(
$file
,
$target
){
//$file = "index.php";
//连贯操作其实就是利用函数处理完后返回自身
$this
->ciphertext(
$file
)->model()->build(
$target
);
echo
'encode------'
.
$target
.
'-----ok<br/>'
;
}
//解密
public
function
decode(
$file
,
$target
=
''
){
//读取要解密的文件
$fpp1
=
file_get_contents
(
$file
);
$this
->decodeMode(
$fpp1
)->build(
$target
);
echo
'decode------'
.
$target
.
'-----ok<br/>'
;
}
//解密模板,得到解密后的文本
private
function
decodeMode(
$fpp1
){
//以eval为标志 截取为数组,前半部分为密文中的替换掉的函数名,后半部分为密文
$m
=
explode
(
'eval'
,
$fpp1
);
//对系统函数的替换部分进行执行,得到系统变量
$varStr
=
substr
(
$m
[0],
strpos
(
$m
[0],
'$'
));
//执行后,后续就可以使用替换后的系统函数名
eval
(
$varStr
);
//判断是否有密文
if
(!isset(
$m
[1])){
return
$this
;
}
//对密文进行截取 {$this->q4} substr
$star
=
strripos
(
$m
[1],
'('
);
$end
=
strpos
(
$m
[1],
')'
);
$str
= ${
$this
->q4}(
$m
[1],
$star
,
$end
);
//对密文解密 {$this->q1} base64_decode
$str
= ${
$this
->q1}(
$str
);
//截取出解密后的 核心密文
$evallen
=
strpos
(
$str
,
'eval'
);
$str
=
substr
(
$str
,0,
$evallen
);
//执行核心密文 使系统变量被赋予值 $O0O000
eval
(
$str
);
//并不能将如下段封装,因为 ${$this->qn} 并不能在全文中起作用
$this
->s = ${
$this
->q1}(
${
$this
->q3}(
${
$this
->q4}(
${
$this
->q2},${
$this
->q5}*2
),
${
$this
->q4}(
${
$this
->q2},${
$this
->q5},${
$this
->q5}
),
${
$this
->q4}(
${
$this
->q2},0,${
$this
->q5}
)
)
);
return
$this
;
}
//递归读取并创建目标目录结构
private
function
targetDir(
$target
){
if
(!
empty
(
$target
) ) {
if
(!
file_exists
(
$target
)){
mkdir
(
$target
,0777,true);
}
else
{
chmod
(
$target
,0777);
}
}
}
//递归解密 对指定文件夹下的php文件解密
public
function
decodeDir(
$source
,
$target
=
""
){
if
(
is_dir
(
$source
)){
$this
->targetDir(
$target
);
$dir
= opendir(
$source
);
while
(false!=
$file
=readdir(
$dir
))
{
//列出所有文件并去掉'.'和'..' 此处用的实例为thinkphp框架,所以默认排除里Thinkphp目录,用户可以按照自己的需求设置
if
(
$file
!=
'.'
&&
$file
!=
'..'
&&
$file
!=
'ThinkPHP'
)
{
$path
=
$target
.DIRECTORY_SEPARATOR.
$file
;
$sourcePath
=
$source
.DIRECTORY_SEPARATOR.
$file
;
$this
->decodeDir(
$sourcePath
,
$path
);
}
}
}
else
if
(
is_file
(
$source
)){
$extension
=
substr
(
$source
,
strrpos
(
$source
,
'.'
)+1);
if
(
strtolower
(
$extension
)==
'php'
){
$this
->decode(
$source
,
$target
);
}
else
{
//不是php的文件不处理
copy
(
$source
,
$target
);
}
//return;
}
}
//递归加密 对指定文件夹下的php文件加密
public
function
encodeDir(
$source
,
$target
){
if
(
is_dir
(
$source
)){
$this
->targetDir(
$target
);
$dir
= opendir(
$source
);
while
(false!=
$file
=readdir(
$dir
))
{
//列出所有文件并去掉'.'和'..'
if
(
$file
!=
'.'
&&
$file
!=
'..'
&&
$file
!=
'ThinkPHP'
)
{
$path
=
$target
.DIRECTORY_SEPARATOR.
$file
;
$sourcePath
=
$source
.DIRECTORY_SEPARATOR.
$file
;
$this
->encodeDir(
$sourcePath
,
$path
);
}
}
}
else
if
(
is_file
(
$source
)){
$extension
=
substr
(
$source
,
strrpos
(
$source
,
'.'
)+1);
if
(
strtolower
(
$extension
)==
'php'
){
$this
->encode(
$source
,
$target
);
}
else
{
copy
(
$source
,
$target
);
}
}
}
}
$ob
=
new
Encryption();
$ob
->source =
"/var/www/bookReservation"
;
$ob
->target =
"/var/www/jiami/bookReservation"
;
//解密指定文件
//$ob->decode('D:\\php\\WWW\\workspace\\weixin2\\Application\\Home\\Controller\\IndexController.class.php');
//$ob->decode('jiami.php');
//$ob->decode('dam6.php');
//对一个指定的文件目录进行加密
$ob
->encodeDir(
$ob
->source,
$ob
->target);
//对一个指定的文件目录进行解密
$ob
->decodeDir(
$ob
->target,
"/var/www/jiami/bookReservationD"
);
|
希望本文所述对大家PHP程序设计有所帮助.
最后此篇关于基于php实现的php代码加密解密类完整实例的文章就讲到这里了,如果你想了解更多关于基于php实现的php代码加密解密类完整实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用框架的对象编写一个用于加密/解密的简单库。方法如下: public static byte[] Encrypt(byte[] key, byte[] vector, byte[] input
据我所知,RIM Crypto API 似乎只提供用于对称加密 (3Des) 的 PKCS5 填充模式。我正在使用 JDE 4.6.0。 我正在尝试为黑莓应用程序提供密码学,该应用程序需要与已经使用标
我已经获得了用于加密的 Java 实现,但遗憾的是我们是一家 .net 商店,我无法将 Java 整合到我们的解决方案中。可悲的是,我也不是 Java 专家,所以我已经为此苦苦挣扎了几天,我想我终于可
我正在尝试使用 KMS 和 AWS 加密 SDK 加密数据。查看 AWS documentation 中提供的示例,似乎没有地方可以明确设置数据 key 。 我找到了 EncryptionMateri
我目前有一个用于为我的网站制作哈希的代码,该代码使用 SALT 进行哈希处理,因此密码是不可逆的...... 目前它是 100% 为我的网站工作,它是使用 ASP.NET(C#) 编码的 这是我的代码
我想要做的是在 javascript 中生成一个 key 对,并在 PHP 中使用这些加密,然后用 JS 解密。 我在附加的代码中有两个问题 它不会从装甲文本块重新加载私钥 并且它不会解密 PHP 加
在进行密码哈希时,我有以下 node.js 代码。 body.password = covid@19 salt = "hello@world" body.passwordhex = crypto.cr
我想知道的是在配置文件中加密连接字符串的明确方法。以下是我的问题: 使用机器级加密,访问我的服务器的任何人都不能编写一个小的 .Net 程序来读取连接字符串的内容吗? 如果我将我的应用程序部署到企业环
我知道 rsync 可以在文件传输期间启用/禁用 ssh 加密协议(protocol)。那么,如果 ssh 加密协议(protocol)被禁用了,是不是意味着 rsync 根本不做任何加密呢? 另外,
脚本必须搜索网页内的字符串。但该脚本不应显示它正在搜索的字符串。我的意思是搜索字符串应该采用加密格式或任何其他格式。但如果没有该搜索字符串,则不应显示网页或应在页面上显示错误。 我要开发一个插件。如果
我正在尝试加密 MySQL 上的某些字段。我正在使用 TPC-DS 的 v2.8 版本,并尝试在客户地址表的某些列上使用 AES。知道如何加密字段的所有行吗?我尝试使用 UPDATE customer
我需要一个简单的 javascript 函数,它允许我使用 key 加密 textarea 数据( key 是存储为散列 session 变量的用户密码,由 PHP 打印到字段中) 我基本上希望在用户
如何在 JavaScript 中散列/加密字符串值?我需要一种机制来隐藏 localStorage/cookie 中的一些数据吗? 这与安全问题有关,但我想为我的数据提供一些保护。 最佳答案 有很多
我有一个程序,其中数据库的密码由远程用户设置。该程序将用户名和密码保存到 xml 文件中的加密字符串中,否则应该是人类可读的。现在,这工作正常,我使用带有 key 的 C# DES 加密,它被加密和解
Kotlin 中是否有任何关于椭圆曲线加密的信息? 用于生成 key 对和加密、解密消息。 关于这个主题的信息很少甚至没有。 例如,我想实现 ECC P-521 椭圆曲线。 是否可以在 Kotlin
所以我知道 MD5 在技术上是新应用程序的禁忌,但我随机想到了这个: 自 md5($password); 不安全,不会 md5(md5($password)) 是更好的选择?我使用它的次数越多,它会变
我一直在努力使用 crypto_secretbox_easy() 在 libsodium 中加密/解密一些数据| .我似乎找不到关于使用的任何好的文档。 我想从用户那里获取密码,用它来以某种方式制作
我正在做一个加密项目 视频,我对这个程序有几个问题。 我用命令转码mp4至HLS与 ts段持续时间约为 10 秒。 首先,我需要使用数据库中的 key 加密这些视频。然而, 我不知道是否使用 ffmp
我有一个加密/复制保护问题。 我正在为使用加密狗的公司编写应用程序。请不要告诉我软件保护是没有用的,或者我应该让它自由地飞向空中,或者我花任何时间这样做都是浪费;这不是关于软件保护有效性的哲学问题,更
我对 有一个疑问VIM 加密 key . 我有一个文本文件,我使用加密该文件 :X 现在,加密 key 的存储位置(路径)。 无论是存储在单独的文件中还是存储在文本文件本身中。 如果我打开文件,它会询
我是一名优秀的程序员,十分优秀!