《PHP實(shí)戰(zhàn):PHP實(shí)現(xiàn)加密的幾種方式介紹》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):PHP實(shí)現(xiàn)加密的幾種方式介紹,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP編程PHP中的加密方式有如下幾種
PHP編程1. MD5加密
PHP編程string md5 ( string $str [, bool $raw_output = false ] )
PHP編程參數(shù)
PHP編程str? --? 原始字符串.
PHP編程raw_output? --? 如果可選的 raw_output 被設(shè)置為 TRUE,那么 MD5 報(bào)文摘要將以16字節(jié)長(zhǎng)度的原始二進(jìn)制格式返回.
PHP編程這是一種不可逆加密,執(zhí)行如下的代碼
PHP編程$password = '123456';
echo md5($password);
得到結(jié)果是e10adc3949ba59abbe56e057f20f883e
PHP編程2. Crype加密
string crypt ( string $str [, string $salt ] )
PHP編程crypt() 返回一個(gè)基于標(biāo)準(zhǔn) UNIX DES 算法或系統(tǒng)上其他可用的替代算法的散列字符串.
PHP編程參數(shù)
PHP編程str? --? 待散列的字符串.
PHP編程salt? --? 可選的鹽值字符串.如果沒有提供,算法行為將由不同的算法實(shí)現(xiàn)決定,并可能導(dǎo)致不可預(yù)料的結(jié)束.
PHP編程這是也一種不可逆加密,執(zhí)行如下的代碼
PHP編程得到的結(jié)果是teMGKvBPcptKo
PHP編程使用自動(dòng)鹽值的例子如下:
PHP編程執(zhí)行結(jié)果是輸出 Password verified!
PHP編程以不同散列類型使用 crypt()的例子如下:
PHP編程其結(jié)果如下
PHP編程Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:????????? $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:???? $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:????? $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:????? $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
在 crypt() 函數(shù)支持多重散列的系統(tǒng)上,下面的常量根據(jù)相應(yīng)的類型是否可用被設(shè)置為 0 或 1:
PHP編程CRYPT_STD_DES - 基于標(biāo)準(zhǔn) DES 算法的散列使用 "./0-9A-Za-z" 字符中的兩個(gè)字符作為鹽值.在鹽值中使用非法的字符將導(dǎo)致 crypt() 失敗.
CRYPT_EXT_DES - 擴(kuò)展的基于 DES 算法的散列.其鹽值為 9 個(gè)字符的字符串,由 1 個(gè)下劃線后面跟著 4 字節(jié)循環(huán)次數(shù)和 4 字節(jié)鹽值組成.它們被編碼成可打印字符,每個(gè)字符 6 位,有效位最少的優(yōu)先.0 到 63 被編碼為 "./0-9A-Za-z".在鹽值中使用非法的字符將導(dǎo)致 crypt() 失敗.
CRYPT_MD5 - MD5 散列使用一個(gè)以 $1$ 開始的 12 字符的字符串鹽值.
CRYPT_BLOWFISH - Blowfish 算法使用如下鹽值:“$2a$”,一個(gè)兩位 cost 參數(shù),“$” 以及 64 位由 “./0-9A-Za-z” 中的字符組合而成的字符串.在鹽值中使用此范圍之外的字符將導(dǎo)致 crypt() 返回一個(gè)空字符串.兩位 cost 參數(shù)是循環(huán)次數(shù)以 2 為底的對(duì)數(shù),它的范圍是 04-31,超出這個(gè)范圍將導(dǎo)致 crypt() 失敗.
CRYPT_SHA256 - SHA-256 算法使用一個(gè)以 $5$ 開頭的 16 字符字符串鹽值進(jìn)行散列.如果鹽值字符串以 “rounds=<N>$” 開頭,N 的數(shù)字值將被用來(lái)指定散列循環(huán)的執(zhí)行次數(shù),這點(diǎn)很像 Blowfish 算法的 cost 參數(shù).默認(rèn)的循環(huán)次數(shù)是 5000,最小是 1000,最大是 999,999,999.超出這個(gè)范圍的 N 將會(huì)被轉(zhuǎn)換為最接近的值.
CRYPT_SHA512 - SHA-512 算法使用一個(gè)以 $6$ 開頭的 16 字符字符串鹽值進(jìn)行散列.如果鹽值字符串以 “rounds=<N>$” 開頭,N 的數(shù)字值將被用來(lái)指定散列循環(huán)的執(zhí)行次數(shù),這點(diǎn)很像 Blowfish 算法的 cost 參數(shù).默認(rèn)的循環(huán)次數(shù)是 5000,最小是 1000,最大是 999,999,999.超出這個(gè)范圍的 N 將會(huì)被轉(zhuǎn)換為最接近的值.
PHP編程3. Sha1加密
PHP編程string sha1 ( string $str [, bool $raw_output = false ] )
PHP編程參數(shù)
PHP編程str? --? 輸入字符串.
PHP編程raw_output? --? 如果可選的 raw_output 參數(shù)被設(shè)置為 TRUE,那么 sha1 摘要將以 20 字符長(zhǎng)度的原始格式返回,否則返回值是一個(gè) 40 字符長(zhǎng)度的十六進(jìn)制數(shù)字.
PHP編程這是也一種不可逆加密,執(zhí)行如下代碼:
PHP編程$password = '123456';
echo sha1($password);
得到的結(jié)果是7c4a8d09ca3762af61e59520943dc26494f8941b
PHP編程以上幾種雖然是不可逆加密,但是也可以根據(jù)查字典的方式去解密.如下的地址中就提供了可以將上面的加密結(jié)果解密出來(lái)的功能.
PHP編程http://www.cmd5.com/
PHP編程那大家是不是加了就算加了密,也沒用啊,其實(shí)不然,只要你的加密足夠復(fù)雜,被破解出的可能性就越小,比如用以上三種加密方式混合加密,之后我會(huì)推薦給大家一個(gè)php的加密庫(kù).
PHP編程4. URL加密
PHP編程string urlencode ( string $str )
PHP編程此函數(shù)便于將字符串編碼并將其用于 URL 的哀求部分,同時(shí)它還便于將變量傳遞給下一頁(yè).
PHP編程返回字符串,此字符串中除了 -_. 之外的所有非字母數(shù)字字符都將被替換成百分號(hào)(%)后跟兩位十六進(jìn)制數(shù),空格則編碼為加號(hào)(+).此編碼與 WWW 表單 POST 數(shù)據(jù)的編碼方式是一樣的,同時(shí)與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣.由于歷史原因,此編碼在將空格編碼為加號(hào)(+)方面與 RFC1738 編碼不同.
PHP編程string urldecode ( string $str )
PHP編程解碼給出的已編碼字符串中的任何 %##. 加號(hào)('+')被解碼成一個(gè)空格字符.
PHP編程這是一種可逆加密,urlencode方法用于加密,urldecode方法用于解密,執(zhí)行如下代碼:
PHP編程$url = 'http://www.xxx.com/CraryPrimitiveMan/';
$encodeUrl = urlencode($url);
echo $encodeUrl . "\n";// 如果是在網(wǎng)頁(yè)上展示的,就將\n修改為<br/>
echo urldecode($encodeUrl);
得到的結(jié)果如下
PHP編程http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F
http://www.xxx.com/CraryPrimitiveMan/
基于RFC 3986的加密URL的方法如下:
PHP編程5. Base64信息編碼加密
PHP編程string base64_encode ( string $data )
PHP編程使用 base64 對(duì) data 進(jìn)行編碼.
PHP編程設(shè)計(jì)此種編碼是為了使二進(jìn)制數(shù)據(jù)可以通過(guò)非純 8-bit 的傳輸層傳輸,例如電子郵件的主體.
PHP編程Base64-encoded 數(shù)據(jù)要比原始數(shù)據(jù)多占用 33% 左右的空間.
PHP編程string base64_decode ( string $data [, bool $strict = false ] )
PHP編程對(duì) base64 編碼的 data 進(jìn)行解碼.
PHP編程參數(shù)
PHP編程data? --? 編碼過(guò)的數(shù)據(jù).
PHP編程strict? --? 如果輸入的數(shù)據(jù)超出了 base64 字母表,則返回 FALSE.
PHP編程執(zhí)行如下代碼:
PHP編程其結(jié)果如下
PHP編程推薦phpass
PHP編程經(jīng) phpass 0.3 測(cè)試,在存入數(shù)據(jù)庫(kù)之前進(jìn)行哈希保護(hù)用戶密碼的標(biāo)準(zhǔn)方式. 許多常用的哈希算法如 md5,甚至是 sha1 對(duì)于密碼存儲(chǔ)都是不平安的, 因?yàn)轳斂湍軌蚴褂媚切┧惴ㄝp而易舉地破解密碼.
PHP編程對(duì)密碼進(jìn)行哈希最平安的方法是使用 bcrypt 算法.開源的 phpass 庫(kù)以一個(gè)易于使用的類來(lái)提供該功能.
PHP編程以上就是本文關(guān)于PHP加密方式的介紹了,希望大家能夠喜歡.
《PHP實(shí)戰(zhàn):PHP實(shí)現(xiàn)加密的幾種方式介紹》是否對(duì)您有啟發(fā),歡迎查看更多與《PHP實(shí)戰(zhàn):PHP實(shí)現(xiàn)加密的幾種方式介紹》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/12212.html