作者/上善若水
專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)五通橋免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1.md5(string $str,bool $flag = false);
$flag = false 默認(rèn)返回32位的16進(jìn)至數(shù)據(jù)散列值
$flag = true ?返回原始流數(shù)據(jù)
2.sha1($string,$flag = false)
$flag = false 默認(rèn)返回40位的16進(jìn)至數(shù)據(jù)散列值
true ?返回原始流數(shù)據(jù)
3.hash(string $algo,srting $str,bool $flag);
$algo : 算法名稱,可通過hash_algos()函數(shù)獲取所有hash加密的算法
如:md5,sha1等,采用md5,sha1加密所得結(jié)果和1,2兩種方式結(jié) 果相同。
$flag = false 默認(rèn)返回16進(jìn)至的數(shù)據(jù)散列值,具體長度根據(jù)算法不同
而不同。
true ?返回原始流數(shù)據(jù)。
4.crypt(string $str,$string $salt);
函數(shù)返回使用 DES、Blowfish 或 MD5 算法加密的字符串。
具體算法依賴于PHP檢查之后支持的算法和$salt的格式和長度,當(dāng) 然具體結(jié)果也和操作系統(tǒng)有關(guān)。比較結(jié)果采用 hash_equals($crypted,crypt($input,$salt));//且salt值相同
Password_verify($str,$crypted);
5.password_hash ( string $str, integer $algo [, array $options ] )
函數(shù)返回哈希加密后的密碼字符串, password_hash() 是crypt()的 一個簡單封裝
$algo : 算法 PASSWORD_DEFAULT ,PASSWORD_BCRYPT
$options = [
“cost”=10,//指明算法遞歸的層數(shù),
“salt”=“xxadasdsad”//加密鹽值,即將被遺 棄,采用系統(tǒng)自動隨機(jī)生成安全性更高
];
使用的算法、cost 和鹽值作為哈希的一部分返回
Password_verify($str,$hashed);
6.base64_encode(string $str)
設(shè)計此種編碼是為了使二進(jìn)制數(shù)據(jù)可以通過非純 8-bit 的傳輸層 傳輸,例如電子郵件的主體。base64_decode(string $encoded)
可以進(jìn)行解碼;
7.mcrypt_encrypt ( string $cipher , string $key , string $data ,
string $mode [, string $iv ] )
mcrypt_decrypt ( string $cipher , string $key , string $crypted ,
string $mode [, string $iv ] )
$ciper:加密算法,mcrypt_list_algorithms()可以獲取該函數(shù)所有支持的算法
如MCRYPT_DES(“des”),MCRYPT_RIJNDAEL_128(“rijndael-128”);
$mode : 加密模式 ,mcrypt_list_modes()獲取所有支持的加密模式,ecb,cbc
$key: 加密的秘鑰,mcrypt_get_key_size ( string $cipher , string $mode )
獲取指定的算法和模式所需的密鑰長度。$key要滿足這個長度,如果長 度無效會報出警告。
$iv : 加密的初始向量,可通過mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_URANDOM ] ),
Iv的參數(shù)size:
通過mcrypt_get_iv_size ( string $cipher , string $mode )獲取
Iv 的參數(shù)source:
初始向量數(shù)據(jù)來源。可選值有: MCRYPT_RAND (系統(tǒng)隨機(jī)數(shù)生成 器), MCRYPT_DEV_RANDOM (從 /dev/random 文件讀取數(shù)據(jù)) 和 ?MCRYPT_DEV_URANDOM (從 /dev/urandom 文件讀取數(shù)據(jù))。 在 Windows 平臺,PHP 5.3.0 之前的版本中,僅支持 MCRYPT_RAND。
請注意,在 PHP 5.6.0 之前的版本中, 此參數(shù)的默認(rèn)值 為 MCRYPT_DEV_RANDOM。
Note: 需要注意的是,如果沒有更多可用的用來產(chǎn)生隨機(jī)數(shù)據(jù)的信息, 那么 MCRYPT_DEV_RANDOM 可能進(jìn)入阻塞狀態(tài)。
$data : 要加密的字符串?dāng)?shù)據(jù)
可以用黑刀Dezender來試試,我不擔(dān)保可以解出來的哦,
從黑刀Dezender4.3版之后,將著力對混淆函數(shù)以及自定義函數(shù)的解密進(jìn)行應(yīng)對。
大家下載壓縮包并解壓后,會發(fā)現(xiàn)有一個“config.ini”的文件,這就是混淆函數(shù)庫啦!
打開后,可自行編輯其中的內(nèi)容,當(dāng)然,也可以通過黑刀Dezender的升級程序直接下載官方最新的混淆函數(shù)庫文件。這個混淆函數(shù)庫就相當(dāng)于是一個字典文件了,在保證格式不變的情況下,大家可以在【黑刀部落】下載《黑刀超級字典生成器》生成字典來掛入主程序進(jìn)行解密,正確步驟為:先備份、改名自己的config.ini文件,生成的字典文件在第一行加入“[OBFUSCATE_NAME]”,將字典文件改名為config.ini,開始解密。
同時,黑刀部落網(wǎng)站的“項(xiàng)目中心”欄目也開設(shè)了用戶提交自己已知程序被混淆的函數(shù)列表,這樣的話,就能讓Dezender變得越來越強(qiáng)了。再也不怕混淆函數(shù)了。呵呵。
什么是混淆函數(shù)?混淆函數(shù),是從Zend Guard 4.0之后新增的一項(xiàng)功能,能把PHP文件中的所有函數(shù)名都進(jìn)行混淆,混淆后變成以“_OBFUSCATE_”開頭的一串“亂碼”,這種加密方式感覺有點(diǎn)類似Md5,因?yàn)楹瘮?shù)名已經(jīng)不是原來的樣子了,所以解密出來的PHP文件是不能正常執(zhí)行的。黑刀Dezender在4.3版之后,新增加了掛入混淆函數(shù)庫參與解密的功能,而混淆函數(shù)庫,就像是一個包含了已知函數(shù)名的字典,利用這個字典,來與被混淆了的函數(shù)名(就是所謂的“亂碼”)進(jìn)行比對,如果比對結(jié)果相同,則解密出來的文件,基本上就可以恢復(fù)到加密前的樣子了。如果混淆函數(shù)庫中沒有包含該P(yáng)HP文件中使用的函數(shù)名,那么解密結(jié)果依然還是會存在“亂碼”的。掌握了這個原理,我們就可以去想辦法解決問題了。
方式有以下幾種:
第一,使用黑刀超級字典生成器產(chǎn)生一個字典,字典的內(nèi)容可以自己把握,修改字典文件名為“config.ini”,然后打開字典文件,在第一行插入“[OBFUSCATE_NAME]”標(biāo)記(注意,方括號也是需要的,也就是引號內(nèi)的內(nèi)容都要加進(jìn)去),將字典文件拷貝入黑刀Dezender主程序所在目錄,同時注意備份原有的config.ini文件。這種辦法費(fèi)時費(fèi)力,也要看運(yùn)氣,不過卻是最實(shí)際的解決辦法。
第二,??磩e人源代碼的朋友,可以把自己已經(jīng)掌握了的混淆函數(shù)的真實(shí)函數(shù)名提交到我的網(wǎng)站上來。操作步驟:進(jìn)入網(wǎng)站首頁,進(jìn)入項(xiàng)目中心的“DeZender混淆函數(shù)庫更新表”,提交。我會定期查看大家提交上來的數(shù)據(jù),加入到官方的混淆函數(shù)庫中,不斷的增強(qiáng)和完善官方混淆函數(shù)庫,大家可以利用黑刀Dezender的自動升級功能對其進(jìn)行升級!
1. php的aes算法,加密時會存在空格,0,\0等方式進(jìn)行補(bǔ)長,所以解密后需要進(jìn)行trim操作,才能得到原數(shù)據(jù)串
2. aes加密后進(jìn)行base64_encode,但是解密時,直接用aes進(jìn)行解密,不需要先base64_decode.【這個操作很騷氣】
function _decryptData($data,$password, $iv){
$decryptData=openssl_decrypt($data, 'aes-128-cbc', $password, OPENSSL_ZERO_PADDING, $iv);
$data =json_decode(trim($decryptData), true);
return $data;
}
function encryptData($data, $password, $iv){
$data = json_encode($data);//$data是一個數(shù)組,如果是字符串,請忽略此句.
$result = base64_encode(openssl_encrypt($data, 'aes-128-cbc', $password, OPENSSL_RAW_DATA, $iv));
return $result;
}
PHP所有的加密都是紙老虎,把eval換為exit,然后在控制臺(或者DOS下)運(yùn)行一下就能看見那個eval語句解密后的代碼,用來替換eval語句既可。例如你的程序中,第一個eval替換為exit后,執(zhí)行輸出的代碼如下:
$OO0OO0000=$OOO000000{17}.$OOO000000{12}.$OOO000000{18}.$OOO000000{5}.$OOO000000{19};if(!0)$O000O0O00=$OO0OO0000($OOO0O0O00,'rb');$OO0OO000O=$OOO000000{17}.$OOO000000{20}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};$OO0OO00O0=$OOO000000{14}.$OOO000000{0}.$OOO000000{20}.$OOO000000{0}.$OOO000000{20};$OO0OO000O($O000O0O00,1253);$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,380),'3MUQw4rlCWsbe+DthpLui5VnAfOSB9N6/dja2XRgFKxGq0yEYZHJcmzvIP1oTk87=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));eval($OO00O00O0);
用這一段替換源文件中的eval那一個語句,替換后的內(nèi)容如下:
?php // This file is protected by copyright law provided under license. Copyright(C) 2009 , All rights reserved.
$OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=9504;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';$OO0OO0000=$OOO000000{17}.$OOO000000{12}.$OOO000000{18}.$OOO000000{5}.$OOO000000{19};if(!0)$O000O0O00=$OO0OO0000($OOO0O0O00,'rb');$OO0OO000O=$OOO000000{17}.$OOO000000{20}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};$OO0OO00O0=$OOO000000{14}.$OOO000000{0}.$OOO000000{20}.$OOO000000{0}.$OOO000000{20};$OO0OO000O($O000O0O00,1253);$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,380),'3MUQw4rlCWsbe+DthpLui5VnAfOSB9N6/dja2XRgFKxGq0yEYZHJcmzvIP1oTk87=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));exit($OO00O00O0);return;?
以上就是PHP解密的原理,但是這個文件到這里已經(jīng)無法自動解密下去了,因?yàn)樵募黄茐牧耍覀兛梢钥磂cho $OO0OO00O0等變量,發(fā)現(xiàn)現(xiàn)在的語句是實(shí)際上是讀取文件中后面的內(nèi)容,進(jìn)行替換,然后再次執(zhí)行,現(xiàn)在需要調(diào)整里面的380,到原文件380字節(jié)后的合適地方。
你可以網(wǎng)上下載這款軟件試試
黑刀Dezender
沒有反應(yīng)好象不對吧?
我用這個軟件解密過杰奇小說的PHP源代碼!
不過解密出來的源代碼只能用來參考,不能直接用回去。
我在懷疑不是PHP代碼的加密,你將/html后面的代碼復(fù)制到另一個記事本里另存為PHP,然后解一下密看看?如果還是不行,你要到網(wǎng)上找其他代碼解密工具試試了!
使用PHP解密數(shù)據(jù)就可以了,代碼參考
1、使用mcrypt擴(kuò)展方式實(shí)現(xiàn):
加密解密代碼中都有例子了
2、純PHP實(shí)現(xiàn):
加密函數(shù):AESEncryptCtr()
解密函數(shù):AESDecryptCtr()