PHP給源代碼加密的幾種方法

雖然說分享是傳統的美德,但咱們有時候辛辛苦苦寫一些程序只是爲了賣點小錢,掙點辛苦費,也防止有些沒有道德的人倒賣,因此咱們不得不對咱們的程序進行加密,如下咱們來介紹一下如何經過PHP的自定義函數來加密咱們的PHP源代碼。

 

方法一:php

1編輯器

2函數

3ui

4this

5編碼

6加密

7url

8spa

9code

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

該方法能夠對文本的內容進行 二進制加密 與 解密。

 

以上幾種方法各有各的優勢和用處,你們也選擇使用。

相關文章
相關標籤/搜索