2019独角兽企业重金招聘Python工程师标准>>>

虽说分享是传统的美德,但我们有时候辛辛苦苦写一些程序只是为了卖点小钱,挣点辛苦费,也防止有些没有道德的人倒卖,所以我们不得不对我们的程序进行加密,以下我们来介绍一下如何通过PHP的自定义函数来加密我们的PHP源代码。

方法一:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?php  

 function encode_file_contents($filename) {  

     $type=strtolower(substr(strrchr($filename,'.'),1));  

     if ('php' == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码  

         $contents file_get_contents($filename); // 判断文件是否已经被编码处理  

         $contents = php_strip_whitespace($filename);   

         // 去除PHP头部和尾部标识  

         $headerPos strpos($contents,'<?php');  

         $footerPos strrpos($contents,'?>');  

         $contents substr($contents$headerPos + 5, $footerPos $headerPos);  

         $encode base64_encode(gzdeflate($contents)); // 开始编码  

         $encode '<?php'."\n eval(gzinflate(base64_decode("."'".$encode."'".")));\n\n?>";   

         return file_put_contents($filename$encode);  

     }  

     return false;  

 }   

 //调用函数  

 $filename 'dam.php';  

 encode_file_contents($filename);  

 echo "OK,加密完成!"

 ?>

加密方法二:

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

<?php  

 function RandAbc($length "") { // 返回随机字符串  

     $str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";  

     return str_shuffle($str);  

 }   

 $filename 'index.php'//要加密的文件  

 $T_k1 = RandAbc(); //随机密匙1  

 $T_k2 = RandAbc(); //随机密匙2  

 $vstr file_get_contents($filename);  

 $v1 base64_encode($vstr);  

 $c strtr($v1$T_k1$T_k2); //根据密匙替换对应字符。  

 $c $T_k1.$T_k2.$c;  

 $q1 "O00O0O";  

 $q2 "O0O000";  

 $q3 "O0OO00";  

 $q4 "OO0O00";  

 $q5 "OO0000";  

 $q6 "O00OO0";  

 $s '$'.$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");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));';  

 $s '<?php '."\n".$s."\n".' ?>';  

 //echo $s;  

 // 生成 加密后的PHP文件  

 $fpp1 fopen('temp_'.$filename'w');  

 fwrite($fpp1$sor die('写文件错误');  

 ?>

加密方法三:

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

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

<?php  

 class text_auth  

 {  

     var $n_iter;  

     function text_auth()  

     {  

         $this->setIter(32);  

     }  

     function setIter($n_iter)  

     {  

         $this->n_iter = $n_iter;  

     }  

     function getIter()  

     {  

         return $this->n_iter;  

     }  

     function encrypt($data$key)  

     {  

         $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 '0000000000000000';  

         $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;  

     }  

     function decrypt($enc_data$key)  

     {  

         $n_enc_data_long $this->_str2long(0, $enc_data$enc_data_long);  

         $this->_resize($key, 16, true);  

         if '' == $key )  

             $key '0000000000000000';  

         $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;  

     }  

     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;  

     }  

     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;  

     }  

     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;  

     }  

     function _hex2bin($str)  

     {  

         $len strlen($str);  

         return pack('H' $len$str);  

     }  

     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;  

     }  

     function _long2str($l)  

     {  

         return pack('N'$l);  

     }  

     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;  

     }  

     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;  

     }  

 }  

 ?> 

使用方法参考如下:

// 加密过程

view sourceprint?

 $text_file = S_ROOT . './456.php';  

 $str = @file_get_contents($text_file);  

 require_once S_ROOT . "./text_auth.php";  

 $text_auth new text_auth(64);  

 $str $text_auth->encrypt($str"qianyunlai.com");  

 $filename = S_ROOT . './789.php'// 加密后的文本为二进制,普通的文本编辑器无法正常查看  

 file_put_contents($filename$str); 

// 解密过程

view sourceprint

?01 $text_file = S_ROOT . './789.php';  

 $str = @file_get_contents($text_file);  

 require_once S_ROOT . "./text_auth.php";  

 $text_auth new text_auth(64);  

 $str $text_auth->decrypt($str"qianyunlai.com");  

 $filename = S_ROOT . './456.php';  

 file_put_contents($filename$str);

该方法可以对文本的内容进行 二进制加密 与 解密。

以上几种方法各有各的优点和用处,大家也选择使用。

转载于:https://my.oschina.net/u/190049/blog/803058

PHP给源代码加密的几种方法相关推荐

  1. swoolephp加密_PHP中给源代码加密的几种方法

    商业使用推荐 Swoole Compiler 代码加密 以下是如何通过PHP的自定义函数来加密我们的PHP源代码 方法一 function encode_file_contents($filename ...

  2. php代码 加密,PHP给源代码加密的几种方法汇总(推荐)

    虽说分享是传统的美德,但我们有时候辛辛苦苦写一些程序只是为了卖点小钱,挣点辛苦费,也防止有些没有道德的人倒卖,所以我们不得不对我们的程序进行加密,以下我们来介绍一下如何通过PHP的自定义函数来加密我们 ...

  3. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  4. 计算机用户加密,计算机硬盘加密的几种方法

    计算机硬盘加密的几种方法 一.修改硬盘分区表信息 硬盘分区表信息对硬盘的启动至关重要,如果找不到有效的分区表,将不能从硬盘启动或即使从软盘启动也找不到硬盘. 通常,第一个分区表项的第0子节为80H,表 ...

  5. asp.net html 加密解密,三种方法还原ASP.NET可逆加密内容

    0x00 在进行安全测试的时候经常遇到ASP.NET平台的各类系统,它们加密手段有强有弱.有的只加密用户信息,有的则将数据库连接字串也进行了加密.以前不熟悉ASP.NET的时候有时解密一个连接字串都要 ...

  6. Axure RP软件怎么查看页面源代码 教你两种方法

    使用Axure RP绘制网页原型图,如果想要查看页面源代码,该用什么方法呢?很简单,我们可以通过两种方法来查看Axure页面代码,具体操作如下. 怎么查看Axure RP软件的页面源代码? 方法一 打 ...

  7. ASP.Net中MD5和SHA1加密的几种方法

    首先简单介绍一下MD5和SHA1: MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Scie ...

  8. 计算机硬盘加密的几种方法,对于移动硬盘加密方法 你了解多少种呢?

    原标题:对于移动硬盘加密方法 你了解多少种呢? 移动硬盘自然随身携带,有时会丢失.一旦丢失,内部数据将不再安全.如果内部有重要信息,将严重威胁您的信息安全.那么,什么是移动硬盘加密方法?让我们来看看. ...

  9. 用代码加密,2种方法教你在C#中保护PPT文档

    数字信息的保护一直是网络世界中的重要方面.为了保护数字内容,已经设计了各种方式和技术.因此,本文明确针对MS PowerPoint演示文稿的安全性,并提供保护PPTX文档安全的不同方法.在本文中,将学 ...

最新文章

  1. 2021蓝桥直播课-软件类-本科组
  2. 2019蓝桥杯省赛---java---A---4(迷宫)
  3. UITableViewCell自适应高度
  4. 面试题1:赋值运算符函数
  5. springMVC框架下JQuery传递并解析Json数据
  6. NetDevOps网络设备日志分析与环境搭建-EFK(Elasticsearch+Filebeat+Kibana)
  7. 单目标决策---决策的分类
  8. 四大行、三大运营商在列,或有15家公司参与央行数字货币
  9. Acwing-45. 之字形打印二叉树
  10. 概率论:概率空间的基本概念
  11. 分析与思考 黄奇帆的复旦经济课 读书笔记
  12. 【哈佛学习力5:情绪管理】
  13. C - error: converting to execution character set:Illegal byte sequence
  14. Pandas详解十之Dropna滤除缺失数据
  15. 编译android源码刷机到Nexus5x
  16. Python 测试框架pytest
  17. Android Studio教程
  18. XYOJ1257: 捕杀恶龙(break+j=k)
  19. 钢丝网骨架塑料复合管的介绍
  20. 如何使用gltf模型?哪里可以免费下载GLTF模型?

热门文章

  1. B2C独立站|网站运营方法
  2. 一直以来都犯的错误,使用include_once而不是include
  3. Java中对图片进行简单加密和解密
  4. 推荐系统(一)召回阶段
  5. 模仿京东-商品详情页前端样式 CSS+html+js
  6. 【JDBC】JDBC快速入门
  7. PR2019 (二)比较基本
  8. 外贸综合型企业解决方案丨汇信外贸软件
  9. tigergraph_TigerGraph启动图形数据库即服务
  10. AVFoundation开发秘籍笔记:第12章 动图层内容