摘要:原文來自在網(wǎng)站的開發(fā)過程中,常常需要對部分數(shù)據(jù)如用戶密碼進行加密,本文主要介紹的幾個常見的加密函數(shù)加密默認情況下以字符十六進制數(shù)字形式返回散列值,它接受兩個參數(shù),第一個為要加密的字符串,第二個為的布爾值,默認為,如果設(shè)置為,則會返回原始
原文來自:https://jellybool.com/post/php-encrypt-functions
在網(wǎng)站的開發(fā)過程中,常常需要對部分數(shù)據(jù)(如用戶密碼)進行加密,本文主要介紹PHP的幾個常見的加密函數(shù)
MD5加密:
string md5 ( string $str [, bool $raw_output = false ] )
1.md5()默認情況下以 32 字符十六進制數(shù)字形式返回散列值,它接受兩個參數(shù),第一個為要加密的字符串,第二個為raw_output的布爾值,默認為false,如果設(shè)置為true,md5()則會返回原始的 16 位二進制格式報文摘要
2.md5()為單向加密,沒有逆向解密算法,但是還是可以對一些常見的字符串通過收集,枚舉,碰撞等方法破解
"; echo md5($password); echo "
"; /*更推薦的做法是對重要的敏感數(shù)據(jù)進行多次加密,以防被輕易破解*/ echo md5(md5($password)); /*以上輸出: username:4f5436e5d72608fb647b691e8edcf42e password:7bf02cf0f4af6da4accbc73d2a175476 password(兩次加密):864704bb35754f8cd0232cba6b91521b */
Crypt加密:
string crypt ( string $str [, string $salt ] )
1.crypt()接受兩個參數(shù),第一個為需要加密的字符串,第二個為鹽值(就是加密干擾值,如果沒有提供,則默認由PHP自動生成);返回散列后的字符串或一個少于 13 字符的字符串,后者為了區(qū)別鹽值。
2.crypt()為單向加密,跟md5一樣。
"; echo crypt($password,"jellybool"); //輸出:je7fNiu1KNaEs /*當我們要加自定義的鹽值時,如例子中的jellybool作為第二個參數(shù)直接加入, 超出兩位字符的會截取前兩位*/ echo "
"; echo crypt($password,"$1$jellybool$"); //輸出:$1$jellyboo$DxH7wF7SygRpWb6XBBgfH/ /* crypt加密函數(shù)有多種鹽值加密支持,以上例子展示的是MD5散列作為鹽值,該方式下 鹽值以$1$$的形式加入,如例子中的jellybool加在后兩個$符之間, 超出八位字符的會截取前八位,總長為12位;crypt默認就是這種形式。 */ echo "
"; //crypt還有多種鹽值加密支持,詳見手冊
Sha1加密:
string sha1 ( string $str [, bool $raw_output = false ]
1.跟md5很像,不同的是sha1()默認情況下返回40個字符的散列值,傳入?yún)?shù)性質(zhì)一樣,第一個為加密的字符串,第二個為raw_output的布爾值,默認為false,如果設(shè)置為true,sha1()則會返回原始的20 位原始格式報文摘要
2.sha1()也是單行加密,沒有逆向解密算法
"; //當然,可以將多種加密算法混合使用 echo md5(sha1($my_intro)); //輸出:94f25bf9214f88b1ef065a3f9b5d9874 //這種方式的雙重加密也可以提高數(shù)據(jù)的安全性
Urlencode加密:
string urlencode ( string $str )
1.一個參數(shù),傳入要加密的字符串(通常應(yīng)用于對URL的加密),
2.urlencode為雙向加密,可以用urldecode來加密(嚴格意義上來說,不算真正的加密)
3.返回字符串,此字符串中除了 -_. 之外的所有非字母數(shù)字字符都將被替換成百分號(%)后跟兩位十六進制數(shù),空格則編碼為加號(+)。
"; $my_urldecode="jellybool.com%3Fjellybool%3Dtrue+%2B+4-3%255%3D+%5C%26+%40%21"; echo urldecode($my_urldecode); //輸出:jellybool.com?jellybool=true + 4-3%5= & @! //還原了$my_urlencode的輸出 echo "
"; $my_urldecode="http://www.baidu.com/s?word=jellybool+%E8%A7%89%E7%B4%AF%E4%B8%8D%E7%88%B1&tn=98236947_hao_pg&ie=utf-8"; echo urldecode($my_urldecode); /*輸出:http://www.baidu.com/s?word=jellybool 覺累不愛&tn=98236947_hao_pg&ie=utf-8 沒錯,這就是在百度搜索jellybool 覺累不愛 */ /* ========================================================================= 解決第二個經(jīng)典問題 ========================================================================= */ $pre_url_encode="jellybool.com?username=jellybool&password=jelly"; //在實際開發(fā)中,我們很多時候要構(gòu)造這種URL,這是沒有問題的 $url_decode ="jellybool.com?username=jelly&bool&password=jelly"; /*注意上面兩個變量的差別:第一個的username=jellybool, 第二個為username=jelly&bool 這種情況下用$_GET()來接受是會出問題的,這是可以用下面的方法解決 */ $username="jelly&bool"; $url_decode ="jellybool.com?username=".urlencode($username)."&password=jelly"; //這是可以很好的解決問題 /* 總結(jié)一下常見的urlencode()的轉(zhuǎn)換字符 ?=> %3F = => %3D % => %25 & => %26 => %5C
=> %2B
空格 => +
*/
base64編碼加密:
string base64_decode ( string $encoded_data )
1.base64_encode()接受一個參數(shù),也就是要編碼的數(shù)據(jù)(這里不說字符串,是因為很多時候base64用來編碼圖片)
2.base64_encode()為雙向加密,可用base64_decode()來解密
echo base64_encode($my_intro); echo "
"; /*輸出:SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGgOacieWuveW 6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a625YWN5qOA5Lq UQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid */ echo base64_decode("SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGg OacieWuveW6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a6 25YWN5qOA5LqUQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid"); /*輸出:JellyBool是一個身材有高度,肩膀有寬度,胸肌有厚度,思想有深度的國家免檢五A 級優(yōu)質(zhì)偽前端IT男屌絲 */
一個圖片的例子:
$data=file_get_contents($filename); echo base64_encode($data); /*然后你查看網(wǎng)頁源碼就會得到一大串base64的字符串, 再用base64_decode()還原就可以得到圖片 */
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/20818.html
摘要:隨著云服務(wù)器的盛行,幾乎無法以指向本機的域名向外發(fā)送郵件,除了在本機內(nèi)發(fā)送提醒郵件,用處已然不大。發(fā)送效率低非面向?qū)ο蟮恼{(diào)用方式,配置麻煩以及云服務(wù)器廠商的封鎖,是使用函數(shù)的最大阻礙。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) session 數(shù)據(jù)庫操作 加解密 Co...
摘要:這里使用你完全可以不提供鹽值和消耗值,你可以將后者理解為一種性能的消耗值,越大,加密算法越復(fù)雜,消耗的內(nèi)存也就越大。 原文來自: https://jellybool.com/post/php-password-hash-in-the-right-way 在使用PHP開發(fā)Web應(yīng)用的中,很多的應(yīng)用都會要求用戶注冊,而注冊的時候就需要我們對用戶的信息進行處理了,最常見的莫過于就是郵箱和密...
摘要:這里使用你完全可以不提供鹽值和消耗值,你可以將后者理解為一種性能的消耗值,越大,加密算法越復(fù)雜,消耗的內(nèi)存也就越大。 原文來自: https://jellybool.com/post/php-password-hash-in-the-right-way 在使用PHP開發(fā)Web應(yīng)用的中,很多的應(yīng)用都會要求用戶注冊,而注冊的時候就需要我們對用戶的信息進行處理了,最常見的莫過于就是...
摘要:面向服務(wù)面向服務(wù)的基礎(chǔ)面向服務(wù)的三層應(yīng)用層,服務(wù)層,數(shù)據(jù)層應(yīng)用層用于給用戶展示,,,,安卓。在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息到達為止。編譯完成,提示我們已經(jīng)在下了。 面向服務(wù) 面向服務(wù)的基礎(chǔ) 面向服務(wù)的三層:應(yīng)用層,服務(wù)層,數(shù)據(jù)層 * 應(yīng)用層:用于給用戶展示,PC,H5,IOS,安卓。 * 服務(wù)層:業(yè)務(wù)邏輯,提供接口(商品,訂單,支付,用戶,物流)。 * 數(shù)據(jù)層:提供數(shù)據(jù)支持(...
閱讀 3490·2023-04-25 20:41
閱讀 2660·2023-04-25 16:40
閱讀 1433·2021-09-23 11:44
閱讀 1252·2021-09-10 10:51
閱讀 1681·2021-09-07 09:59
閱讀 1642·2019-12-27 12:08
閱讀 552·2019-08-30 15:44
閱讀 3334·2019-08-30 11:08