...原生的加密函數 還是對PHP源文件加密啊?

創(chuàng)新互聯建站于2013年開始,先為江源等服務建站,江源等地企業(yè),進行企業(yè)商務咨詢服務。為江源企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
函數有
md5()
md5_file()
crypt()
sha1()
sha1_file() 等等吧。。。具體的你要查下
PHP源文件加密是ZEND
PHP如何對用戶密碼進行加密
第一種方法:可以使用如下方法對用戶密碼進行加密:MySqlSET user@”localhost” PASSWORD=PASSWORD(”Password”);
第二種方法:可以使用MYSQL的 PASSWORD函數進行用戶密碼的加密。例如:Insert into user(password, ……..) values (PASSWORD(”$password”,………));
可以在一個PHP文件里面include另外一個PHP文件兩次嗎
是的,可以在一個PHP文件里面include另外一個PHP文件兩次,被include的那個php文件也會執(zhí)行兩次,所以如果在這個文件里面定義的有一個class, 就會報出the class already defined的錯誤。
mysql的最長數據庫名,表名,字段名可以是多長
數據庫名字最長為64
數據表名字最長為64
字段名字最長為64
mysql_pconnect()和mysql_connect()有什么區(qū)別
兩者的區(qū)別主要有兩個:
1. 在進行數據庫連接時,函數會先找同一個host, 用戶和密碼的persistent(持續(xù)的)的'鏈接,如果能找到,則使用這個鏈接而不返回一個新的鏈接。
2. mysql_pconnect()創(chuàng)建的數據庫連接在腳本執(zhí)行完畢后仍然保留,可以被后來的代碼繼續(xù)使用,mysql_close()函數也不會關閉mysql_pconnect()創(chuàng)建的鏈接。
;
數據庫加密的方式從最早到現在有4種技術,首先是前置代理加密技術,該技術的思路是在數據庫之前增加一道安全代理服務,所有訪問數據庫的行為都必須經過該安全代理服務,在此服務中實現如數據加解密、存取控制等安全策略,安全代理服務通過數據庫的訪問接口實現數據存儲。安全代理服務存在于客戶端應用與數據庫存儲引擎之間,負責完成數據的加解密工作,加密數據存儲在安全代理服務中。
然后是應用加密技術,該技術是應用系統(tǒng)通過加密API對敏感數據進行加密,將加密數據存儲到數據庫的底層文件中;在進行數據檢索時,將密文數據取回到客戶端,再進行解密,應用系統(tǒng)自行管理密鑰體系。
其次是文件系統(tǒng)加解密技術,該技術不與數據庫自身原理融合,只是對數據存儲的載體從操作系統(tǒng)或文件系統(tǒng)層面進行加解密。這種技術通過在操作系統(tǒng)中植入具有一定入侵性的“鉤子”進程,在數據存儲文件被打開的時候進行解密動作,在數據落地的時候執(zhí)行加密動作,具備基礎加解密能力的同時,能夠根據操作系統(tǒng)用戶或者訪問文件的進程ID進行基本的訪問權限控制。
最后后置代理技術,該技術是使用“視圖”+“觸發(fā)器”+“擴展索引”+“外部調用”的方式實現數據加密,同時保證應用完全透明。核心思想是充分利用數據庫自身提供的應用定制擴展能力,分別使用其觸發(fā)器擴展能力、索引擴展能力、自定義函數擴展能力以及視圖等技術來滿足數據存儲加密,加密后數據檢索,對應用無縫透明等核心需求。安華金和的加密技術在國內是唯一支持TDE的數據庫加密產品廠商。
今天有一個朋友問我thinkphp的這個問題,剛好百度搜索到你這個問題。已經解決。就幫你解答一下這個問題。
首先我嘗試在入口文件封裝一個加密函數,我用php des 加密,然后在配置文件config.php調用。然后在控制器里面使用,打印配置文件:dump(C());//輸出所有的配置文件信息, 雖然能看到正確的數據用戶名和密碼,但是會報錯。失敗告終。
我說一下我的解決方法。很簡單。
1:把配置文件里面的用戶名,密碼,數據庫名瞎寫一寫,別人看到你的代碼的配置文件看到的就是錯誤的數據庫名和密碼了。比如:
'DB_NAME' = 'SB', // 數據庫名
'DB_USER' = 'ni_da_ye', // 用戶名
'DB_PWD' = 'da_da_bi', // 密碼
在每個控制器文件里面。加入一段代碼。
比如你的IndexController.class.php文件。加下面的代碼。
/* 初始化方法*/
public function __construct(){
parent::__construct();
C("DB_NAME",decrypt('712349721937491237'));//數據庫名,
C('DB_USER',decrypt('712349721937491237'));//用戶名
C('DB_PWD',decrypt('712349721937491237'));//密碼
}
看清楚了嗎?
decrypt()這個函數就是我封裝的一個加密函數,親自測試沒有錯誤。可能會犧牲一些性能。但是保證了用戶名,密碼,數據庫名沒有泄露。甚至你都可以把數據庫連接地址也加密一下。希望能幫到你。
PHP加密函數可以考慮用des,aes這些可逆加密。別用什么md4,md5.
在使用PHP開發(fā)Web應用的中,很多的應用都會要求用戶注冊,而注冊的時候就需要我們對用戶的信息進行處理了,最常見的莫過于就是郵箱和密碼了,本文意在討論對密碼的處理:也就是對密碼的加密處理。
MD5
相信很多PHP開發(fā)者在最先接觸PHP的時候,處理密碼的首選加密函數可能就是MD5了,我當時就是這樣的:
$password = md5($_POST["password"]);
上面這段代碼是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受歡迎了,因為它的加密算法實在是顯得有點簡單了,而且很多破解密碼的站點都存放了很多經過MD5加密的密碼字符串,所以這里我是非常不提倡還在單單使用MD5來加密用戶的密碼的。
SHA256 和 SHA512
其實跟前面的MD5同期的還有一個SHA1加密方式的,不過也是算法比較簡單,所以這里就一筆帶過吧。而這里即將要說到的SHA256 和 SHA512都是來自于SHA2家族的加密函數,看名字可能你就猜的出來了,這兩個加密方式分別生成256和512比特長度的hash字串。
他們的使用方法如下:
?php
$password = hash("sha256", $password);
PHP內置了hash()函數,你只需要將加密方式傳給hash()函數就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
鹽值
在加密的過程,我們還有一個非常常見的小伙伴:鹽值。對,我們在加密的時候其實會給加密的字符串添加一個額外的字符串,以達到提高一定安全的目的:
?php
function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);}
Bcrypt
如果讓我來建議一種加密方式的話,Bcrypt可能是我給你推薦的最低要求了,因為我會強烈推薦你后面會說到的Hashing API,不過Bcrypt也不失為一種比較不錯的加密方式了。
?php
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") CRYPT_BLOWFISH) {$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);return crypt($password, $salt);
}
}
Bcrypt 其實就是Blowfish和crypt()函數的結合,我們這里通過CRYPT_BLOWFISH判斷Blowfish是否可用,然后像上面一樣生成一個鹽值,不過這里需要注意的是,crypt()的鹽值必須以$2a$或者$2y$開頭,詳細資料可以參考下面的鏈接:
更多資料可以看這里:
Hashing API
這里才是我們的重頭戲,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面幾個函數供我們使用:
password_hash() – 對密碼加密.
password_verify() – 驗證已經加密的密碼,檢驗其hash字串是否一致.
password_needs_rehash() – 給密碼重新加密.
password_get_info() – 返回加密算法的名稱和一些相關信息.
雖然說crypt()函數在使用上已足夠,但是password_hash()不僅可以使我們的代碼更加簡短,而且還在安全方面給了我們更好的保障,所以,現在PHP的官方都是推薦這種方式來加密用戶的密碼,很多流行的框架比如Laravel就是用的這種加密方式。
?php
$hash = password_hash($passwod, PASSWORD_DEFAULT);對,就是這么簡單,一行代碼,All done。
PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我會說推薦這個,不過因為Password Hashing API做得更好了,我必須鄭重地想你推薦Password Hashing API。這里需要注意的是,如果你代碼使用的都是PASSWORD_DEFAULT加密方式,那么在數據庫的表中,password字段就得設置超過60個字符長度,你也可以使用PASSWORD_BCRYPT,這個時候,加密后字串總是60個字符長度。
這里使用password_hash()你完全可以不提供鹽值(salt)和 消耗值 (cost),你可以將后者理解為一種性能的消耗值,cost越大,加密算法越復雜,消耗的內存也就越大。當然,如果你需要指定對應的鹽值和消耗值,你可以這樣寫:
?php
$options = [
'salt' = custom_function_for_salt(), //write your own code to generate a suitable salt'cost' = 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);密碼加密過后,我們需要對密碼進行驗證,以此來判斷用戶輸入的密碼是否正確:
?php
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很簡單的吧,直接使用password_verify就可以對我們之前加密過的字符串(存在數據庫中)進行驗證了。
然而,如果有時候我們需要更改我們的加密方式,如某一天我們突然想更換一下鹽值或者提高一下消耗值,我們這時候就要使用到password_needs_rehash()函數了:
?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' = 12])) {// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' = 12]);// don't forget to store the new hash!
}
只有這樣,PHP的Password Hashing API才會知道我們重現更換了加密方式,這樣的主要目的就是為了后面的密碼驗證。
簡單地說一下password_get_info(),這個函數一般可以看到下面三個信息:
algo – 算法實例
algoName – 算法名字
options – 加密時候的可選參數
所以,現在就開始用PHP 5.5吧,別再糾結低版本了。
Happy Hacking
題主你可以使用 md5 或者 sha1 進行初步處理,但為了更加安全,請你同時加上兩個 salt,一個靜態(tài) salt,一個動態(tài)的 salt。以 md5 為例:\x0d\x0a假設通過 POST 傳來的密碼為 $_POST['password'],在存入 DB 前先進行如下的操作:\x0d\x0a$password = hash('md5', $_POST['password'].$staticSalt.$dynamicSalt);\x0d\x0a\x0d\x0a為了保證動態(tài) salt 的唯一性,可以這樣操作:\x0d\x0a$dynamicSalt = hash('md5', microtime());\x0d\x0a\x0d\x0a對于動態(tài)的 salt 可以與生成的密碼一起保存在 DB 中,而靜態(tài) salt 則可以直接放在類文件中(例如定義為一個靜態(tài)屬性即可)。\x0d\x0a首先謝謝題主采納了我的答案,但是我之前的回答并不是最佳答案,之所以有此加密的想法源于自己所讀的源碼可能比較老,所以并沒使用上較新版本的加密方法,例如 bcrypt等。\x0d\x0a此外,第二點,感謝評論中幾位前輩的提點,已經明白設置靜態(tài) salt 的意義并不大,生成一個較長的動態(tài) salt 已然可以解決問題。\x0d\x0a\x0d\x0aLZ應該采用加鹽HASH。\x0d\x0a如何“腌制”密碼呢?\x0d\x0a=_,=\x0d\x0a正確的格式應該是,用戶password+動態(tài)的salt\x0d\x0a動態(tài)的salt不能像2L所說的,使用microtime,因為時間在某些情況下不夠隨機,而且是可能被猜解的。\x0d\x0a這里推薦一個我用的加鹽HASH\x0d\x0a$salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM));\x0d\x0a$password=sha1($register_password.$salt);\x0d\x0a\x0d\x0a解釋:\x0d\x0a首先使用mcrypt,產生電腦隨機生成的,專門用戶加密的隨機數函數。\x0d\x0a第二步,把得到的隨機數通過base64加密,使其變長并且不利于猜解。\x0d\x0a第三步,把得出的鹽拼接到密碼的后面,再對其使用sha1進行哈希\x0d\x0a再把password存入到用戶的數據庫。\x0d\x0aPS:為何不用靜態(tài)的salt?沒有必要,使用一個動態(tài)隨機足夠長的鹽足矣。\x0d\x0a為何不用MD5?因為長度不夠。\x0d\x0a為何沒有使用多次HASH?因為這樣反而容易發(fā)生碰撞。\x0d\x0aHASH好之后怎么使用“腌制”好的密碼?\x0d\x0a用戶注冊-提交密碼-產生salt-腌制好的密碼存入數據庫-salt存入數據庫。\x0d\x0a用戶登錄-提交密碼-調用salt接到提交密碼的后面-進行HASH-調用之前注冊腌制好的密碼-對比HASH值是否和這個密碼相同
當前文章:php網站數據庫加密方式 php文件在線加密
標題鏈接:http://chinadenli.net/article42/hejcec.html
成都網站建設公司_創(chuàng)新互聯,為您提供云服務器、品牌網站設計、服務器托管、商城網站、網站營銷、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯