国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > PHP > 正文

PHP中的MD5加密

2024-05-04 22:53:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

    綜述:密碼學(xué)是研究編制密碼(我們簡(jiǎn)稱為加密:encode)和破譯密碼(我們稱之為解密:decode)的技術(shù)科學(xué)。研究密碼變化的客觀規(guī)律,應(yīng)用于編制密碼以保守通信秘密的,稱為編碼學(xué);應(yīng)用于破譯密碼以獲取通信情報(bào)的,稱為破譯學(xué),總稱密碼學(xué)。通常情況下,人們將可懂的文本稱為明文;將明文變換成的不可懂的文本稱為密文。把明文變換成密文的過(guò)程叫加密;其逆過(guò)程,即把密文變換成明文的過(guò)程叫解密。   

   php中提供了哪些數(shù)據(jù)加密功能?   

   php提供了crypt()函數(shù)完成加密功能:  

   string crypt (string input_string [, string salt])  

   這一函數(shù)完成被稱作單向加密的功能,也就是說(shuō),它可以加密一些明碼,但不能夠?qū)⒚艽a轉(zhuǎn)換為原來(lái)的明碼。單向加密的口令一旦落入第三方人的手里,由于不能被還原為明文,因此也沒(méi)有什么大用處。在驗(yàn)證用戶輸入的口令時(shí),用戶的輸入采用的也是單向算法,如果輸入與存儲(chǔ)的經(jīng)加密后的口令相匹配,則輸入的口令一定是正確的。   

   這個(gè)函數(shù)的input_string參數(shù)是需要加密的字符串,第二個(gè)參數(shù)salt是一個(gè)位字串,它能夠影響加密的暗碼,進(jìn)一步地排除被稱作預(yù)計(jì)算攻擊的可能性。缺省情況下,php使用一個(gè)2個(gè)字符的des干擾串,如果你的系統(tǒng)使用的是md5 ,它會(huì)使用一個(gè)12個(gè)字符的干擾串。我們可以通過(guò)執(zhí)行下面的命令發(fā)現(xiàn)系統(tǒng)將要使用的干擾串的長(zhǎng)度:   

   print "系統(tǒng)使用的干擾串的長(zhǎng)度是:". crypt_salt_length;   

   crypt()支持四種算法,下面是它支持的算法和相應(yīng)的salt參數(shù)的長(zhǎng)度:

   [注:以下用表格]   

   算法 salt長(zhǎng)度

   crypt_std_des 2-character (默認(rèn))

   crypt_ext_des 9-character

   crypt_md5 12-character beginning with $1$

   crypt_blowfish 16-character beginning with $2$   

   怎樣將php的數(shù)據(jù)加密功能應(yīng)用于用戶驗(yàn)證?   

   我們用crypt()實(shí)現(xiàn)用戶身份驗(yàn)證。比如我們用一段php程序限制對(duì)一個(gè)目錄的訪問(wèn),只允許注冊(cè)用戶訪問(wèn)這一目錄。我們把資料存儲(chǔ)mysql數(shù)據(jù)庫(kù)的一個(gè)表(這個(gè)數(shù)據(jù)表名為members)中:   

   mysql>create table members (

   ->username char(14) not null,

   ->password char(32) not null,

   ->primary key(username)

   ->);   

   然后,我們可以輸入用戶的數(shù)據(jù)到該表中:   

   用戶名 密碼

   tom kelod1c377lke

   john ba1t7vnz9awgk

   bill paluvrwsrlz4u   

   這些加密的口令對(duì)應(yīng)的明碼分別是tom、john和bill。我們將根據(jù)口令的前二個(gè)字母創(chuàng)建干擾串:

   $enteredpassword.

   $salt = substr($enteredpassword, 0, 2);

   $userpswd = crypt($enteredpassword, $salt);   

   // $userpswd然后就和用戶名一起存儲(chǔ)在mysql 中   

   crypt()和apache的口令-應(yīng)答驗(yàn)證系統(tǒng)的應(yīng)用  

   <?php

   $host = "localhost"; //主機(jī)

   $username = "tom"; //用戶名

   $passwd = "hello world"; //密碼

   $db = "users"; //數(shù)據(jù)庫(kù)名   

   // 設(shè)置是否通過(guò)驗(yàn)證標(biāo)志,默認(rèn)為否

   $authorization = 0;   

   // 提示用戶輸入帳號(hào)和密碼   

   if (isset($php_auth_user) && isset($php_auth_pw)){

   mysql_pconnect($host, $username, $passwd) or die("不能連接到mysql服務(wù)器!");

   mysql_select_db($db) or die("不能選擇數(shù)據(jù)庫(kù)!");   

   // 進(jìn)行加密

   $salt = substr($php_auth_pw, 0, 2);

   $encrypted_pswd = crypt($php_auth_pw, $salt);   

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 花垣县| 临泽县| 湖南省| 唐海县| 克山县| 和硕县| 都安| 莒南县| 西青区| 津南区| 板桥市| 黑龙江省| 宜兴市| 宜君县| 铜梁县| 仙居县| 莱阳市| 望奎县| 崇信县| 武川县| 古丈县| 萨嘎县| 丹寨县| 太原市| 邵阳县| 康定县| 民权县| 开化县| 黎川县| 黄冈市| 灌云县| 洛南县| 揭西县| 镇赉县| 阳泉市| 芦溪县| 建宁县| 凤城市| 会同县| 确山县| 五莲县|