本文目錄一覽:
求大佬,解決一個php的自定義加密函數的
md5
按MD5算法,從字符串得到32位的HASH。
urlencode
把URL做成可以放進地址欄的形式
urldecode
把放進地址欄的東西還原成URL
base64_encode
按BASE64算法,把字符串(可以是二進制的)加密,得到長度與輸入有關,比輸入長很多,得到的字符範圍是可顯示的。
base64_decode
按BASE64算法解密
ord
取一個字符串的第一個字母的ASCII代碼
chr
從一個數得到一個字符串,長度1,內容為以這個數為ASCII代碼的字符
explode
以第一個參數為分段符號,把第二個參數切斷,得到一個數組的字符串
implode
以第一個參數為連接符號,把第二個參數(一個數組的字符串)連接成一個字符串
count
返回字符串的長度
substr
取字符串的一部分
srand
設置隨機種子,同樣的隨機種子按照同樣的順序取到的隨機數必然相同,在PHP里一般用於DEBUG。在 PHP 較早版本中,必須在使用rand()之前調用 srand() 播下隨機數種子(以時間為srand的參數)。自 PHP 4.2.0 不再需要這樣做了(直接用rand()就好)。
php源碼怎麼加密
一、無需任何PHP擴展的加密
此類加密的代表有 威盾PHP加密專家、PHP在線加密平台、PHP神盾 等。
此類加密都是以eval函數為核心,輔以各式各樣的字符串混淆和各種小技巧,來達到加密目的(更準確的說,應該算是混淆)。下面以一個簡單的hello world為例來說明此類加密的大體過程。
?php
echo “hello world”;
首先 ,我們把這段代碼變為通過eval執行的
?php
eval(‘echo “hello world”;’);
然後 ,我們再進行一些轉換,比如說base64編碼
?php
eval(base64_decode(‘ZWNobyAiaGVsbG8gd29ybGQiOw==’));
就這樣子,我們的第一個加密過的php代碼新鮮出爐了。。。
上面這個例子非常非常簡單,基本上任何有一點php語言基礎甚至別的語言基礎的人都能輕鬆的看懂並解密。因此,我們需要一些方法讓這個加密至少看上去不是那麼簡單。
二、同時採用多種編碼函數
除了剛才提到的base64,php還有許多內置的編碼函數,例如urlencode、gzcompress等。把這些函數混合使用可以提高解密的複雜度(不是難度),此外還可以使用strtr來制定自己的編碼規則。 使用變量來代替函數名 使用特定字符來命名變量
這兒所說的特定字符是一些極其相似的字符,如I和1,0和O。試想一下滿屏都是O和0組成的變量,並且每一個的名字長度都在10個字符以上。。。 判斷文件自身是否被修改
這個功能看似容易,對文件做一下摘要再進行下對比即可知道是否被修改了,但是如何才能在文件內把摘要嵌入進去呢?我沒有找到完美的方案,但一個變通的方案還是很容易的。。。
?php
$code = substr(file_get_contents(__FILE__), 0, -32);
$hash = substr(file_get_contents(__FILE__), -32);
if (md5($code) !== $hash) {
exit(‘file edited’);
}
ACBC41F727E00F85BEB3440D751BB4E3
當然,你可以把這個校驗字符串放在別的位置來提高破解的難度。有了這個,別人想破解你的程序可就得多費一點功夫了。。。
既然知道了原理,那解密自然也就非常簡單了,總體來說就三步:
把eval替換為輸出,比如echo 根據編碼規則把字符串還原 如果文件未解密完全,從第一步開始繼續
當然,實際上的解密過程並沒有這麼簡單,比如說如果加密的時候使用了gzcompress,那得到的數據將會包含一些二進制數據,而採用一般的文本編輯器打開時這些數據都會顯示為亂碼,並且在保存時丟失部分數據。解決方法很簡單也很麻煩,那就是使用二進制(16進制)方式打開、修改和保存。
PHP 加密擴展 php-beast 的使用
安裝完 php-beast 後可以使用 tools 目錄下的 encode_files.php 來加密你的項目。使用 encode_files.php 之前先修改 tools 目錄下的 configure.ini 文件,如下:
src_path 是要加密項目的路徑,
dst_path 是保存加密後項目的路徑,
expire 是設置項目可使用的時間 (expire 的格式是:YYYY-mm-dd HH:ii:ss)。
encrypt_type是加密的方式,選擇項有: DES、AES、BASE64 。
修改完 configure.ini 文件後就可以使用命令 php encode_files.php 開始加密項目。
附上例子:將demo項目全部加密到新的demo2
使用 beast_encode_file() 函數加密文件,函數原型如下:
beast_encode_file(string $input_file, string $output_file, int expire_timestamp, int encrypt_type)
例子:
beast_encode_file(‘index2.php’,’index3.php’,’1656518400′,BEAST_ENCRYPT_TYPE_AES);
想要更深入了解的話可以看官方文檔
參考文章:
php如何自定義加密?
直接使用非對稱加密吧!對base64_encode在加密一次,非對稱加密和對稱加密,php都有現成的類可以調用,你可以查下!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/233707.html