為什麼找回密碼時不能找回原密碼,而必須重設新密碼?


首先大家要清楚,稍微有點安全意識的程序員給用戶的密碼加密時採用的都是不可逆加密演算法。因為如果加密演算法是可逆的,那就意味著有資料庫瀏覽許可權的普通工程師可以反向解析出用戶的密碼!或者一旦資料庫被人惡意獲取,用戶密碼也非常可能被破解。既然加密是不可逆的,那就是說如果你忘記了自己原來設置的密碼,那世界上沒有人知道你的密碼,除非用程序去暴力破解。但是暴力破解需要耗費大量的計算資源,短時間內不可能完成。因此軟體為用戶提供的"找回密碼"功能,普遍是讓用戶重設密碼,或者自動生成一個密碼再發郵件(或者簡訊)給用戶。


做軟體開發的人應該都清楚為什麼。

在找回密碼的時候,之前的密碼是經過加密的並且不可逆的保存在伺服器上的。這個密碼只有你自己知道,其他任何人都是無法知曉的。當你找回密碼時不可能給你一串加密的密文,因為所有人都看不懂密文,只能重新設置密碼,然後系統加密然後再覆蓋之前的密碼加密密文,保存到資料庫。


初次答題,錯誤之處敬請斧正。

首先,我們要了解的是,密碼在伺服器上是怎樣儲存的。可以想到,用戶密碼這種東西一定不能明文儲存在伺服器端。那麼它採用了什麼樣的加密方式呢?

答案是「不可逆加密演算法」。

顧名思義,這種演算法的特點就是經過加密後的結果無法逆向運算得出原始數據,用來保存密碼再合適不過了。

在實際應用中,用戶輸入的密碼會在客戶端進行不可逆加密,然後將所得加密結果上傳至服務端。服務端會和已有密碼數據(在設置密碼時得到的不可逆加密數據)進行對比。對比結果為真,則通過驗證。

那麼可以想到,既然是不可逆加密演算法,服務端也無法得到密碼原文。也就是說,服務端可以知道你輸入的密碼對不對,但是不能知道你設置的密碼是什麼。也就可以明白為什麼服務端不會將你的原密碼發到你的郵箱里了。(他不知道你的密碼是什麼又怎能告訴你密碼是什麼呢?)

現在對於這種密碼的破解方式只有暴力破解,也就是用數學方法得出每一個可能的密碼(如一個3位數字密碼的密碼鎖有10^3=1000種不同的密碼),然後逐個嘗試(所以銀行卡密碼連續3~4次輸入錯誤將會凍結,這是為了降低密碼被猜中的概率)。但這種方法既浪費時間又浪費計算資源。這樣也就杜絕了密碼在服務端泄露的可能。

現在常用的不可逆加密演算法有MD5、S哈希等。也可以使用多重加密的方式來進行更深一層的加密。(例如123456使用16位MD5加密得到 49BA59ABBE56E057 後,所得數據再用哈希SHA1加密得到 074012b0aa361255c272f4c707d0f638b987260d )


不得不說還真有這麼乾的,去年偶然發現台灣也有個三國殺的伺服器,就註冊了一個,過了一段時間密碼忘了就找回密碼,他們真的把密碼給我發到了郵箱,明文的。嗯,去年六月他們倒閉了。


微信上的加密密碼忘記了,怎麼辦?


比起這個更噁心的難道不是找回密碼需要輸入原密碼嗎?我要是知道原密碼我還用得著找回嗎?真不明白軟體開發者腦子用來幹啥的。

好在我每次找回原密碼時都提示:密碼不能與原密碼一致。


2台伺服器解決此問題 逆著來 A資料庫加密用戶名 B資料庫加密密碼 用戶找回密碼即從A資料庫索引 A資料庫是遠程伺服器上的 找到信息後進行郵件發送 我覺得這樣也行 嘿嘿 麻煩了些 不過強大的程序員應該有自己的一套方法 我見一個人用的加密超過64位 我了個擦124位加密 你怎麼解 解到啥時候 遠程伺服器可以通過API進行通訊 索引的時候就像用戶輸入密碼時候 一樣 進行驗證用戶名是否正確 正確後就從資料庫內調用信息在通過API返回到本地 保存到臨時變數中 然後發送到用戶郵箱 我看也行。如果是保存在本地資料庫 我感覺不太好 要是伺服器被入侵了 我了個擦 那不是全完


你打10086你說我密碼是開卡的原始密碼,你就提供你身份信息就能改


登錄的密碼忘記了,手機號也停用了。我只知道微信號


hash演算法一般是不可逆的


如果能找回原密碼,你覺得你還會相信系統的安全性嗎?


從密碼認證系統設計來看,除了你自己任何人都不應該知道你的密碼,即便是最高許可權的管理員也不能知道,這樣一來,一但你的賬號有未經授權的操作可以很容易查清,防止某個最高許可權的賬號以你的名義來操作。

一個健康的密碼系統不會以明文來存放密碼,並且還要使用不可逆演算法對明文加密,這樣除了你自己沒有知道你的密碼。

即便你對明文密碼系統充分信任,在找回密碼使用原明文還可能被截獲,如果恰好你這個密碼和其他系統是一樣的話,那麼其他的系統會因為這個不健康的系統變的對你來說不安全了。


密碼最重要的是安全。。。密碼的一個設計原理是你設的密碼是A,系統(或者說驗證密碼的一方)會得到一個唯一的B,輸入密碼時是用A去和B匹配(或者各種計算),匹配上了才證明密碼正確。所以理論上,為了安全,系統是不會知道你的密碼A的,而它知道的B,也不能反推出A,所以無法返回你A密碼。。。。。能夠明文返回A的,在設計上都是有缺陷的。


我也想知道,為什麼現在有的密碼要求全英文

有的密碼要求英文帶數字

有的密碼要求大小寫英文

有的密碼要求6位純數字!

我特么到是真希望早點出指紋一鍵全解鎖!老子的智商已經不夠用了!

===============================================================

然後現在出來的近期用過的密碼,也不能用了。我已經徹底傻逼了。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

我現在的做法就是,開一個表,把所有的平台賬號密碼記上面, 然後 壓縮文件。上個自己不會忘的密碼,然後放微雲里。 目前是最穩妥的辦法了。。。。


我覺


推薦閱讀:

推薦一款程序員背包?
哪本入門級的學習資料庫的書最值得推薦?
手機電池剩餘電量顯示的原理與實現方法?
hash 值是否唯一確定?如果是,為什麼不可逆?
這件T恤上的代碼是什麼意思?

TAG:計算機 | 代碼 | 計算機網路 |