java存储过程示例_安全密码存储–请勿做的事和Java示例
生活随笔
收集整理的這篇文章主要介紹了
java存储过程示例_安全密码存储–请勿做的事和Java示例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
java存儲(chǔ)過(guò)程示例
安全存儲(chǔ)密碼的重要性 作為軟件開(kāi)發(fā)人員,我們最重要的職責(zé)之一就是保護(hù)用戶(hù)的個(gè)人信息。 如果沒(méi)有我們應(yīng)用程序的技術(shù)知識(shí),用戶(hù)別無(wú)選擇,只能相信我們正在履行這一責(zé)任。 令人遺憾的是,在密碼方面,軟件開(kāi)發(fā)社區(qū)的記錄不一。 盡管不可能構(gòu)建一個(gè)100%安全的系統(tǒng),但幸運(yùn)的是,我們可以采取一些簡(jiǎn)單的步驟來(lái)使用戶(hù)的密碼足夠安全,以使?jié)撛诘暮诳湍軌驅(qū)ふ腋菀椎墨C物。 如果您不希望所有背景知識(shí),請(qǐng)隨時(shí)跳到下面的Java SE示例 。 不要 首先,讓我們快速討論一些在構(gòu)建需要身份驗(yàn)證的應(yīng)用程序時(shí)不應(yīng)該做的事情:- 除非確實(shí)需要,否則不要存儲(chǔ)身份驗(yàn)證數(shù)據(jù)。 這似乎是一個(gè)解決方案,但是在開(kāi)始構(gòu)建用戶(hù)憑據(jù)數(shù)據(jù)庫(kù)之前,請(qǐng)考慮讓其他人來(lái)處理它。 如果您要構(gòu)建公共應(yīng)用程序,請(qǐng)考慮使用OAuth提供程序,例如Google或Facebook 。 如果要構(gòu)建內(nèi)部企業(yè)應(yīng)用程序,請(qǐng)考慮使用任何可能已經(jīng)存在的內(nèi)部身份驗(yàn)證服務(wù),例如公司LDAP或Kerberos服務(wù)。 無(wú)論是公共應(yīng)用程序還是內(nèi)部應(yīng)用程序,您的用戶(hù)都將無(wú)需記住其他用戶(hù)ID和密碼,這將是不勝枚舉的選擇,而且數(shù)據(jù)庫(kù)供黑客攻擊的少得多。
- 如果您必須存儲(chǔ)身份驗(yàn)證數(shù)據(jù),那么就Gosling而言,請(qǐng)不要以明文形式存儲(chǔ)密碼 。 這應(yīng)該很明顯,但是值得一提。 讓我們至少讓黑客大汗淋漓。
- 除非您確實(shí)需要檢索明文密碼,否則不要使用雙向加密。 僅當(dāng)您使用他們的憑據(jù)代表他們與外部系統(tǒng)交互時(shí),才需要知道他們的明文密碼。 即使這樣,您最好還是讓用戶(hù)直接通過(guò)該系統(tǒng)進(jìn)行身份驗(yàn)證。 為了清楚起見(jiàn), 您無(wú)需使用用戶(hù)的原始明文密碼在應(yīng)用程序中執(zhí)行身份驗(yàn)證 。 稍后我將對(duì)此進(jìn)行更詳細(xì)的介紹,但是在執(zhí)行身份驗(yàn)證時(shí),您將對(duì)用戶(hù)輸入的密碼應(yīng)用加密算法,并將其與您存儲(chǔ)的加密密碼進(jìn)行比較。
- 不要使用像MD5這樣的過(guò)時(shí)的哈希算法 。 老實(shí)說(shuō),用MD5散列密碼實(shí)際上是沒(méi)有用的。 這是MD5哈希密碼: 569a70c2ccd0ac41c9d1637afe8cd932 。 轉(zhuǎn)到http://www.md5hacker.com/ ,您可以在幾秒鐘內(nèi)將其解密。
- 不要提出自己的加密方案。 世界上有一些杰出的加密專(zhuān)家,能夠勝過(guò)黑客并設(shè)計(jì)出新的加密算法。 我不是其中之一,很可能您也不是。 如果黑客可以訪問(wèn)您的用戶(hù)數(shù)據(jù)庫(kù),那么他們也可能也可以獲取您的代碼。 除非您發(fā)明了PBKDF2或bcrypt的下一個(gè)偉大的后繼產(chǎn)品,否則它們將瘋狂地破解,因?yàn)樗鼈儠?huì)Swift破解所有用戶(hù)的密碼并將其發(fā)布在Darknet上 。
- 選擇一種單向加密算法。 如前所述,一旦您加密并存儲(chǔ)了用戶(hù)密碼,就無(wú)需再知道真實(shí)的價(jià)值了。 用戶(hù)嘗試進(jìn)行身份驗(yàn)證時(shí),只需將相同的算法應(yīng)用于他們輸入的密碼,然后將其與您存儲(chǔ)的加密密碼進(jìn)行比較。
- 使加密速度盡可能慢,以使應(yīng)用程序可以容忍 。 任何現(xiàn)代的密碼加密算法都應(yīng)允許您提供增加密碼加密所需時(shí)間的參數(shù)(即,在PBKDF2中,指定迭代次數(shù))。 為什么慢的好? 您的用戶(hù)不會(huì)注意到是否需要花費(fèi)額外的100毫秒來(lái)加密密碼,但是嘗試進(jìn)行暴力攻擊的黑客會(huì)在數(shù)十億次運(yùn)行該算法時(shí)注意到這種差異。
- 選擇一個(gè)眾所周知的算法 。 美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院(NIST) 建議使用PBKDF2作為密碼。 bcrypt是一種流行且已建立的替代方法,而scrypt是一種相對(duì)較新的算法,已廣受歡迎。 所有這些都是受歡迎的原因:它們很好。
- 由NIST推薦。 特殊出版物800-132的 5.3節(jié)建議使用PBKDF2加密密碼。 安全官員會(huì)喜歡的。
- 可調(diào)式按鍵伸展功能可以克服蠻力攻擊 。 密鑰擴(kuò)展的基本思想是,在將哈希算法應(yīng)用于密碼之后,您將繼續(xù)對(duì)結(jié)果多次應(yīng)用同一算法(迭代計(jì)數(shù))。 如果黑客試圖破解您的密碼,那么這將大大增加嘗試數(shù)十億種可能的密碼所需的時(shí)間。 如前所述,速度越慢越好。 PBKDF2允許您指定要應(yīng)用的迭代次數(shù),從而使其盡可能慢。
- 一種必需的鹽,可用來(lái)克服彩虹表攻擊并防止與其他用戶(hù)的沖突。 鹽是每個(gè)用戶(hù)唯一的隨機(jī)生成的位序列,并作為哈希的一部分添加到用戶(hù)密碼中。 通過(guò)使結(jié)果的預(yù)先計(jì)算的列表不可行,可以防止彩虹表攻擊 。 而且,由于每個(gè)用戶(hù)都有自己的名字,即使兩個(gè)用戶(hù)使用相同的密碼,加密值也將不同。 關(guān)于是否應(yīng)將鹽與加密密碼分開(kāi)存放的地方,存在許多相互矛盾的信息。 由于PBKDF2中的密鑰擴(kuò)展已經(jīng)保護(hù)了我們免受暴力攻擊,因此我認(rèn)為沒(méi)有必要隱藏鹽。 NIST SP 800-132的3.1節(jié)還將鹽定義為“非秘密的二進(jìn)制值”,這就是我所要遵循的。
- Java SE 6的一部分 。 無(wú)需其他庫(kù)。 這對(duì)于在具有限制性開(kāi)放源代碼策略的環(huán)境中工作的人員特別有吸引力。
翻譯自: https://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html
java存儲(chǔ)過(guò)程示例
總結(jié)
以上是生活随笔為你收集整理的java存储过程示例_安全密码存储–请勿做的事和Java示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 期货长期趋势怎么确定方向?
- 下一篇: java 枚举内嵌枚举_Java枚举益智