鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ js對(duì)用戶登錄的密碼進(jìn)行加密,通過源碼不還是可以看到怎么加密的嗎

js對(duì)用戶登錄的密碼進(jìn)行加密,通過源碼不還是可以看到怎么加密的嗎

做一個(gè)簡單的加密。
用戶輸入用戶名和密碼,在js文件里通過md5對(duì)數(shù)據(jù)進(jìn)行加密以后傳給后臺(tái),后臺(tái)讀取數(shù)據(jù)庫,判斷是否符合。
就算這樣加密了,別人通過F12看到我js文件的代碼,就知道咋加密的了...還有用嗎
應(yīng)該怎么弄呢。

回答
編輯回答
挽歌
沒有絕對(duì)的安全

首先md5不能算是加密算法,因?yàn)樗菃蜗虻?、不可逆的,你沒法對(duì)經(jīng)過md5運(yùn)算過的密碼進(jìn)行“解密”而得到原始的明文密碼,但確實(shí)在md5與密碼發(fā)生關(guān)系時(shí)我們喜歡叫它“加密”。所以就算攻擊者知道你用了md5哈希算法,截獲了你“加密”后的密碼,即md5(password)(不妨設(shè)md5哈希函數(shù)為md5(),用戶明文密碼為password),也無法通過倒推得知用戶的明文密碼,只能暴力窮舉猜測用戶的密碼。

其次,就算攻擊者不知道password,只知道md5(password),也足夠了,他只要向服務(wù)器發(fā)送md5(password)便能通過認(rèn)證。而且驗(yàn)證的過程仍為明文對(duì)比,只是從對(duì)比明文密碼變成對(duì)比明文密碼的哈希值。為了解決這個(gè)問題,有人提出給密碼“加鹽”:服務(wù)器既不存儲(chǔ)明文密碼password,也不存儲(chǔ)md5(password),而是存儲(chǔ)md5(password)salt,這個(gè)salt即“鹽”。用戶每次登陸時(shí),服務(wù)器先生成一個(gè)動(dòng)態(tài)的、短時(shí)間內(nèi)不會(huì)重復(fù)的salt發(fā)送給用戶,然后用戶將md5(md5(password) + salt)發(fā)回給服務(wù)器,服務(wù)器經(jīng)過同樣的運(yùn)算后對(duì)比結(jié)果,一致則通過驗(yàn)證。這樣一來,攻擊者就算截獲了saltmd5(md5(password) + salt),也無法倒推出md5(password),同時(shí)salt一經(jīng)使用,就會(huì)失效,攻擊者就無法通過重新發(fā)送md5(md5(password) + salt)來偽裝成用戶。

但上述做法有個(gè)問題(至少一個(gè)問題):設(shè)置密碼時(shí),用戶必須告知服務(wù)器md5(password),同時(shí)服務(wù)器上會(huì)明文存儲(chǔ)md5(password),如果設(shè)置密碼時(shí)md5(password)被截獲,或服務(wù)器的數(shù)據(jù)庫被入侵,攻擊者就會(huì)得知md5(password),從而就可以偽裝成用戶通過密碼驗(yàn)證了。而且,如果這個(gè)用戶在其它網(wǎng)站也使用了一樣的密碼(這是很常見的),其它網(wǎng)站又剛好使用了一樣的密碼驗(yàn)證方式,攻擊者就能同時(shí)獲得該用戶在多個(gè)網(wǎng)站的授權(quán)(撞庫)。這個(gè)問題的根本原因是設(shè)計(jì)者沒有擺脫“明文密碼”,用md5(password)來代替明文密碼與直接使用明文密碼沒有太大區(qū)別,因此有人提出,我們不要用md5(password),改用md5(password + salt)吧。這里的salt不是前面的salt,前面的是“動(dòng)態(tài)鹽”,現(xiàn)在所說的是“靜態(tài)鹽”,為了區(qū)分,用dsalt代表動(dòng)態(tài)鹽,用ssalt代表靜態(tài)鹽。那么登陸方式就變成:服務(wù)器存儲(chǔ)md5(password + ssalt)和與之配套的靜態(tài)鹽ssalt(靜態(tài)鹽在設(shè)置密碼時(shí)配套生成),登陸時(shí),服務(wù)器動(dòng)態(tài)生成隨機(jī)的動(dòng)態(tài)鹽dsalt,將ssaltdsalt一同發(fā)給用戶,用戶將md5(md5(password + ssalt) + dsalt)發(fā)回給服務(wù)器,服務(wù)器進(jìn)行同樣的運(yùn)算,結(jié)果一致則驗(yàn)證通過。這樣一來,就算攻擊者知道了md5(password + ssalt),也只是攻破了這個(gè)用戶在一個(gè)網(wǎng)站上的賬戶,而不能攻破該用戶使用的其它網(wǎng)站的賬戶——因?yàn)楣粽卟荒芡ㄟ^md5(password + ssalt)倒推出md5(password),且對(duì)于其它網(wǎng)站,靜態(tài)鹽ssalt也是不同的,通過md5(password + ssalt1)無法推出md5(password + ssalt2)。

如果你不想讓md5(password + ssalt)被截獲,你可以使用非對(duì)稱加密(詳情自行搜索),但非對(duì)稱加密對(duì)中間人攻擊(詳情自行搜索)無能為力,為了使非對(duì)稱加密能夠抵抗中間人攻擊,人們又搞出了基于信任的一套機(jī)制(詳情自行搜索),但信任又是可以背叛的……所以說沒有絕對(duì)的安全。

感興趣可以自學(xué)密碼學(xué)。

2017年1月19日 02:51
編輯回答
傲嬌范

使用非對(duì)稱的加密算法。比如,大家都知道的RSA。。。

2018年5月19日 20:47
編輯回答
醉淸風(fēng)

啊,首先先來應(yīng)付正常情況下下,你在輸入密碼的時(shí)候,一般是不會(huì)給人操作你的電腦的吧?
然后至于為什么進(jìn)行哈?;笤俦4鏀?shù)據(jù)庫,是因?yàn)楸苊饽銛?shù)據(jù)庫信息被盜的問題,如果沒有哈?;拿艽a,一旦服務(wù)器端的帳號(hào)數(shù)據(jù)被盜,那么不法份子就有很多種操作進(jìn)行不良行為了。

2017年9月5日 14:41
編輯回答
墻頭草

客戶端加密/摘要/哈希的主要好處是在應(yīng)對(duì)弱密碼的問題(加鹽更好), 同時(shí)增加攻擊的難度. 佐以https和服務(wù)器端的加密更好. 有時(shí)增加障礙就會(huì)減少攻擊的可能性.不讓那些練手的反復(fù)折騰你的服務(wù)器.

2018年3月30日 19:17