在普通HTTP上安全地傳輸密碼
更新時(shí)間:2007年07月21日 00:00:00 作者:
1。理論
在普通HTTP上,一般表單中的密碼都是以明文方式傳到服務(wù)器進(jìn)行處理的。這無(wú)疑給了壞人以可乘之機(jī)!這里我們就說(shuō)說(shuō)怎么傳輸密碼才是安全的!
與其傳輸密碼本身,到不如傳輸其加密后的形式。MD5是個(gè)不錯(cuò)的選擇。第一,不同的資源幾乎不可能生成相同的MD5摘要,第二,MD5的編碼方式是不可逆推的。有了這些特性,我們就可以讓MD5摘要公開(kāi)的在Internet上傳輸,而不必?fù)?dān)心密碼被壞人知道。然后在服務(wù)端也將密碼通過(guò)同樣的方式加密,最后比較這兩個(gè)字符串。
然而,我們不能為了登陸而將密碼md5后直接通過(guò)Internet傳輸,因?yàn)閴娜穗m然不會(huì)知道我們的密碼,但肯定會(huì)知道這個(gè)特殊的字符串可以授權(quán)他們?cè)L問(wèn)我們的網(wǎng)站!
這就是公匙和私匙要解決的問(wèn)題,首先由服務(wù)器提供一個(gè)隨機(jī)字符串,然后客戶端將這個(gè)隨機(jī)字符串和密碼相加后再加密!
每次登陸時(shí),服務(wù)器會(huì)產(chǎn)生不同的隨機(jī)字符串,這樣你的密碼沒(méi)有變,但是通過(guò)上面的方法加密后的MD5摘要卻完全不同。這樣就算壞人得到了這些MD5摘要,他們也不可能分析出你的密碼!
這種方法中,服務(wù)器提供的隨機(jī)字符串叫做"公匙",壽命很短,并可以被任何人利用;你的密碼叫做"私匙",壽命很長(zhǎng),而且永遠(yuǎn)也不會(huì)被人知道。
2。實(shí)現(xiàn)
客戶端Javascript并沒(méi)有提供現(xiàn)成的md5算法,但我們?cè)?nbsp;google 上用 "md5 javascript" 搜索,就可以得到很多md5在Javascript上實(shí)現(xiàn)的例子。
在PHP中我就不用多說(shuō)了,直接用md5()這個(gè)函數(shù)就可以搞定!隨機(jī)字符串我們可以用session來(lái)存儲(chǔ)(PHP就是強(qiáng)啊~~)
3。注意
在JS中,中文都是UTF-8格式的,所以如果你的密碼是中文,而且存儲(chǔ)在服務(wù)端的密碼的編碼方式是GB2312,那么兩個(gè)密碼加密后的字符串是完全不同的!
在普通HTTP上,一般表單中的密碼都是以明文方式傳到服務(wù)器進(jìn)行處理的。這無(wú)疑給了壞人以可乘之機(jī)!這里我們就說(shuō)說(shuō)怎么傳輸密碼才是安全的!
與其傳輸密碼本身,到不如傳輸其加密后的形式。MD5是個(gè)不錯(cuò)的選擇。第一,不同的資源幾乎不可能生成相同的MD5摘要,第二,MD5的編碼方式是不可逆推的。有了這些特性,我們就可以讓MD5摘要公開(kāi)的在Internet上傳輸,而不必?fù)?dān)心密碼被壞人知道。然后在服務(wù)端也將密碼通過(guò)同樣的方式加密,最后比較這兩個(gè)字符串。
然而,我們不能為了登陸而將密碼md5后直接通過(guò)Internet傳輸,因?yàn)閴娜穗m然不會(huì)知道我們的密碼,但肯定會(huì)知道這個(gè)特殊的字符串可以授權(quán)他們?cè)L問(wèn)我們的網(wǎng)站!
這就是公匙和私匙要解決的問(wèn)題,首先由服務(wù)器提供一個(gè)隨機(jī)字符串,然后客戶端將這個(gè)隨機(jī)字符串和密碼相加后再加密!
每次登陸時(shí),服務(wù)器會(huì)產(chǎn)生不同的隨機(jī)字符串,這樣你的密碼沒(méi)有變,但是通過(guò)上面的方法加密后的MD5摘要卻完全不同。這樣就算壞人得到了這些MD5摘要,他們也不可能分析出你的密碼!
這種方法中,服務(wù)器提供的隨機(jī)字符串叫做"公匙",壽命很短,并可以被任何人利用;你的密碼叫做"私匙",壽命很長(zhǎng),而且永遠(yuǎn)也不會(huì)被人知道。
2。實(shí)現(xiàn)
客戶端Javascript并沒(méi)有提供現(xiàn)成的md5算法,但我們?cè)?nbsp;google 上用 "md5 javascript" 搜索,就可以得到很多md5在Javascript上實(shí)現(xiàn)的例子。
在PHP中我就不用多說(shuō)了,直接用md5()這個(gè)函數(shù)就可以搞定!隨機(jī)字符串我們可以用session來(lái)存儲(chǔ)(PHP就是強(qiáng)啊~~)
3。注意
在JS中,中文都是UTF-8格式的,所以如果你的密碼是中文,而且存儲(chǔ)在服務(wù)端的密碼的編碼方式是GB2312,那么兩個(gè)密碼加密后的字符串是完全不同的!
相關(guān)文章
php 驗(yàn)證碼制作(網(wǎng)樹(shù)注釋思想)
php 驗(yàn)證碼制作原理分析。2009-07-07
php include,include_once,require,require_once
其實(shí)PHP包含文件的這四個(gè)函數(shù),很多人還是沒(méi)完全明白的,雖然用的時(shí)候多,但是具體某些地方該怎么用,用那一個(gè),我就獻(xiàn)丑一把.2008-09-09
解決File size limit exceeded 錯(cuò)誤的方法
本篇文章是對(duì)File size limit exceeded 錯(cuò)誤進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP通過(guò)get方法獲得form表單數(shù)據(jù)方法總結(jié)
這篇文章我們給大家介紹了PHP如何通過(guò)get的方式來(lái)得到獲取form表單數(shù)據(jù)的方法,有需要的朋友們參考下。2018-09-09
php ob_flush,flush在ie中緩沖無(wú)效的解決方法
一些版本的 Microsoft Internet Explorer 只有當(dāng)接受到的256個(gè)字節(jié)以后才開(kāi)始顯示該頁(yè)面,所以必須發(fā)送一些額外的空格來(lái)讓這些瀏覽器顯示頁(yè)面內(nèi)容。2010-05-05

