亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

加密/散列數據庫中的純文本密碼

加密/散列數據庫中的純文本密碼

慕運維8079593 2019-08-15 16:40:23
加密/散列數據庫中的純文本密碼我繼承了一個Web應用程序,我剛剛在SQL Server數據庫中以純文本形式存儲了超過300,000個用戶名/密碼。我意識到這是一件非常糟糕的事情。知道我必須更新登錄和密碼更新過程以加密/解密,并且對系統其余部分的影響最小,您會建議從數據庫中刪除純文本密碼的最佳方法是什么?任何幫助表示贊賞。編輯:對不起,如果我不清楚,我打算問你的加密/哈希密碼的程序,而不是特定的加密/散列方法。我應該只是:備份數據庫更新登錄/更新密碼代碼幾小時后,瀏覽用戶表中記錄密碼的所有記錄并替換每個記錄測試以確保用戶仍然可以登錄/更新密碼我想我的關注更多來自于大量的用戶,所以我想確保我正確地做到這一點。
查看完整描述

3 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

我想你必須在數據庫中為加密密碼添加一列,然后在獲取當前密碼的所有記錄上運行批處理作業,對其進行加密(因為其他人提到像md5這樣的哈希是非常標準的編輯:但不應該單獨使用 - 請參閱其他答案以獲得良好的討論),將其存儲在新列中并檢查所有內容是否順利進行。

然后,您需要更新前端以在登錄時散列用戶輸入的密碼,并驗證是否與存儲的散列相比,而不是檢查明文與明文。

在最終將明文密碼全部刪除之前,將兩個列保留一段時間以確保沒有任何錯誤發生,這似乎是謹慎的做法。

不要忘記,只要密碼被訪問,代碼就必須更改,例如密碼更改/提醒請求。你當然會失去通過電子郵件發送忘記密碼的能力,但這不是壞事。您將不得不使用密碼重置系統。

編輯:最后一點,您可能要考慮避免我第一次嘗試在測試床安全登錄網站上犯的錯誤:

處理用戶密碼時,請考慮進行散列的位置。在我的例子中,哈希是由在Web服務器上運行的PHP代碼計算的,但密碼是以明文形式從用戶機器傳輸到頁面的!這在我工作的環境中是可以的(ish),因為它無論如何都在https系統內(uni網絡)。但是,在現實世界中,我想你會想要在離開用戶系統之前對密碼進行哈希處理,使用javascript等,然后將哈希傳輸到你的站點。


查看完整回答
反對 回復 2019-08-15
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

基本策略是使用密鑰派生函數用一些鹽“哈?!泵艽a。salt和哈希結果存儲在數據庫中。當用戶輸入密碼時,鹽和它們的輸入以相同的方式進行散列并與存儲的值進行比較。如果匹配,則對用戶進行身份驗證。

細節決定成敗。首先,很大程度上取決于所選擇的哈希算法。像PBKDF2這樣的密鑰派生算法,基于基于散列的消息認證代碼,使得在計算上不可行地找到將產生給定輸出的輸入(在這種情況下,密碼)(攻擊者在數據庫中找到了什么) )。

預先計算的字典攻擊使用預先計算的索引或字典,從散列輸出到密碼。散列很慢(或者它應該是,無論如何),因此攻擊者一次性散列所有可能的密碼,并以這樣的方式存儲索引結果,即給定散列,他可以查找相應的密碼。這是時間空間的經典權衡。由于密碼列表可能很大,因此有一些方法可以調整權衡(如彩虹表),這樣攻擊者就可以放棄一點速度來節省大量空間。

使用“加密鹽”阻礙了預計算攻擊。這是一些使用密碼進行哈希處理的數據。它不需要是秘密,它只需要對給定的密碼不可預測。對于鹽的每個值,攻擊者需要一個新的字典。如果使用一個字節的salt,攻擊者需要256個字典副本,每個副本使用不同的鹽生成。首先,他使用salt查找正確的字典,然后他使用hash輸出來查找可用的密碼。但是如果添加4個字節怎么辦?現在他需要40億份字典。通過使用足夠大的鹽,排除了字典攻擊。實際上,來自加密質量隨機數發生器的8到16個字節的數據是很好的。

通過預先計算表,攻擊者可以在每次嘗試時計算哈希值?,F在找到密碼需要多長時間完全取決于散列候選人所需的時間。通過散列函數的迭代來增加該時間。數字迭代通常是密鑰導出函數的參數; 今天,許多移動設備使用10,000到20,000次迭代,而服務器可能使用100,000或更多。(bcrypt算法使用術語“成本因子”,它是所需時間的對數度量。)


查看完整回答
反對 回復 2019-08-15
  • 3 回答
  • 0 關注
  • 784 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號