說(shuō)到在http協(xié)議下用戶登錄如何保證密碼安全這個(gè)問(wèn)題:
小白可能第一想法就是,用戶在登錄頁(yè)面輸入密碼進(jìn)行登錄時(shí),前臺(tái)頁(yè)面對(duì)用戶輸入的密碼進(jìn)行加密,然后把加密后的密碼作為http請(qǐng)求參數(shù)通過(guò)網(wǎng)絡(luò)發(fā)到服務(wù)器。
這樣做是無(wú)法保證用戶的賬戶安全的,因?yàn)樯晕⒍稽c(diǎn)編程知識(shí)的人就可以通過(guò)你發(fā)送的http請(qǐng)求知道了你的密碼,小白又說(shuō)了,我密碼加密了,它拿到的也是加密后的密碼,它不知道我的原始密碼它是無(wú)法從登錄頁(yè)面登錄的。
原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6009648.html
新浪微博:intsmaze劉洋洋哥
但是小白啊,你有沒(méi)有想過(guò),有時(shí)候我僅僅知道你加密后的明文就夠了,我可以自己偽造http請(qǐng)求,把明文加在請(qǐng)求參數(shù)里面,一樣可以登錄系統(tǒng)的。
大白這時(shí)候有話說(shuō)了,大白:我可以對(duì)密碼進(jìn)行加鹽。好,我們先看加鹽是什么,加鹽簡(jiǎn)單說(shuō)就是程序?qū)τ脩粼O(shè)置的原始密碼后面追加隨機(jī)數(shù)來(lái)加強(qiáng)用戶密碼的復(fù)雜性,然后再對(duì)組合后的密碼進(jìn)行加密進(jìn)行存儲(chǔ),用戶每一次登錄,前端先對(duì)用戶輸入密碼進(jìn)行加密傳輸?shù)胶蠖耍缓蠛蠖双@得用戶賬號(hào)到數(shù)據(jù)庫(kù)找到該用戶的鹽,再和傳來(lái)的明文組合一起進(jìn)行一次加密后與數(shù)據(jù)庫(kù)中的密碼進(jìn)行對(duì)比來(lái)判斷是否是符合用戶。但是啊,大白,你看,這樣做,并無(wú)法控制其他人通過(guò)你http請(qǐng)求獲得明文,獲得后,人家照樣大搖大擺使用你的身份登錄系統(tǒng)進(jìn)行操作。
好,大白讓我跟你講講加鹽的真正意義:加鹽的意義不是為了保證密碼在網(wǎng)絡(luò)傳輸?shù)陌踩裕欠乐箶?shù)據(jù)庫(kù)被人入侵后,由于原始密碼太過(guò)簡(jiǎn)單,被人分析出來(lái),進(jìn)而知道了密碼。直接對(duì)密碼進(jìn)行MD5處理后,反向解密確實(shí)難度很大,但還是可以找出破綻