国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 尚志市| 通辽市| 梁平县| 禹城市| 呼玛县| 比如县| 彝良县| 三原县| 岚皋县| 卢龙县| 青岛市| 西乡县| 灵寿县| 高阳县| 疏勒县| 哈尔滨市| 汉川市| 绥化市| 弋阳县| 汨罗市| 南漳县| 铜鼓县| 平谷区| 通渭县| 肥城市| 邢台县| 定远县| 乌苏市| 安泽县| 许昌市| 南郑县| 华亭县| 大庆市| 上思县| 鄂托克旗| 莲花县| 和平区| 东源县| 宕昌县| 阳高县| 凤冈县|