『壹』 如何安全的存儲用戶密碼
大多數的web開發者都會遇到設計用戶賬號系統的需求。賬號系統最重要的一個方面就是如何保護用戶的密碼。一些大公司的用戶資料庫泄露事件也時有發生,所以我們必須採取一些措施來保護用戶的密碼,即使網站被攻破的情況下也不會造成較大的危害。如果你還在存儲用戶密碼的MD5,那可真的有點弱了。
保護密碼最好的的方式就是使用帶鹽的密碼hash(salted password hashing).對密碼進行hash操作是一件很簡單的事情,但是很多人都犯了錯。接下來我希望可以詳細的闡述如何恰當的對密碼進行hash,以及為什麼要這樣做。
重要提醒
如果你打算自己寫一段代碼來進行密碼hash,那麼趕緊停下吧。這樣太容易犯錯了。這個提醒適用於每一個人,不要自己寫密碼的hash演算法 !關於保存密碼的問題已經有了成熟的方案,那就是使用phpass或者本文提供的源碼。
什麼是hash
hash("hello") =
hash("hbllo") =
hash("waltz") =
Hash演算法是一種單向的函數。它可以把任意數量的數據轉換成固定長度的「指紋」,這個過程是不可逆的。而且只要輸入發生改變,哪怕只有一個bit,輸出的hash值也會有很大不同。這種特性恰好合適用來用來保存密碼。因為我們希望使用一種不可逆的演算法來加密保存的密碼,同時又需要在用戶登陸的時候驗證密碼是否正確。
在一個使用hash的賬號系統中,用戶注冊和認證的大致流程如下:
1, 用戶創建自己的賬號
2, 用戶密碼經過hash操作之後存儲在資料庫中。沒有任何明文的密碼存儲在伺服器的硬碟上。
3, 用戶登陸的時候,將用戶輸入的密碼進行hash操作後與資料庫里保存的密碼hash值進行對比。
4, 如果hash值完全一樣,則認為用戶輸入的密碼是正確的。否則就認為用戶輸入了無效的密碼。
5, 每次用戶嘗試登陸的時候就重復步驟3和步驟4。
在步驟4的時候不要告訴用戶是賬號還是密碼錯了。只需要顯示一個通用的提示,比如賬號或密碼不正確就可以了。這樣可以防止攻擊者枚舉有效的用戶名。
還需要注意的是用來保護密碼的hash函數跟數據結構課上見過的hash函數不完全一樣。比如實現hash表的hash函數設計的目的是快速,但是不夠安全。只有加密hash函數(cryptographic hash functions)可以用來進行密碼的hash。這樣的函數有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一個常見的觀念就是密碼經過hash之後存儲就安全了。這顯然是不正確的。有很多方式可以快速的從hash恢復明文的密碼。還記得那些md5破解網站吧,只需要提交一個hash,不到一秒鍾就能知道結果。顯然,單純的對密碼進行hash還是遠遠達不到我們的安全需求...
以上是下面鏈接文章里的片段
具體請查看這個鏈接里的文章:
http://www.freebuf.com/articles/web/28527.html
滿意望採納~
『貳』 資料庫中怎樣存儲用戶密碼才能保證安全
正確的方法就是不存儲密碼,而是存儲對密碼進行不可逆加密(如MD5)後的結果。這樣別人打開資料庫也只能看到加密運算後的結果,無法反推出密碼。而需要驗證用戶密碼時,只需要同樣進行加密運算然後和資料庫里的結果對比是否一致即可。
『叄』 jsp 資料庫用戶名和密碼是如何保存的
一般是存在一個.properties或者.xml文件中,作為配置文件。這樣就方便管理,即使資料庫的鏈接屬性如地址、服務名、埠、用戶名、密碼什麼的發生了變化,只要修改一下配置文件就可以了,很方便。
『肆』 如何將密碼加密後存入oracle資料庫
如果不需要恢復明碼,可以用md5
如果需要恢復明碼,可以用des之類的。
『伍』 用戶名和存儲密碼迷你資料庫加密的話應該怎麼做
1、定義一個加密處理的class類,通常可以使用MD5來加密,在網路上可以找到此Java源代碼
2、在保存用戶的密碼時,先對獲取的密碼進行MD5加密後再保存到數據,如:
String passwd=request.getParameter("passwd");
passwd=MD5(passwd);
//通過JDBC寫入到資料庫
3、在用戶登錄時,將用戶登錄輸入的密碼進行MD5加密後與資料庫讀取的密碼進行比較,若相等若通過登錄:
String passwd=request.getParameter("passwd");
.......
if(MD5(passwd).equal(rs.get("passwd")))
//通過登錄
『陸』 如何建立存放用戶名和密碼的資料庫表
createtableUserThe(資料庫表名)
(IdintIDENTITY(1,1)NOTNULL,
userIDint,'會員ID自動遞增,並是唯一的
usernamevarchar(50),'會員名稱50個字以內
attributeintDEFAULT0,'屬性默認值是設置0
Userpasswordvarchar(50),'這列是用戶存放密碼,建議用md5加密後保存,驗證的時候用戶輸入的密碼也加密後對比
UsTimeDateTimeDEFAULTGetDate(),'這個可以記錄時間,默認為生成的時間
);
『柒』 怎樣在資料庫中存儲用戶名密碼
user表;id(int 12,主鍵,自增,唯一,索引。username(varchar 64),password(varchar 64),createtime(time)創建時間欄位
『捌』 各位用php將密碼存入資料庫,都用什麼方法進行加密的
php將密碼存入資料庫,可以分內常見的4種方式:
1、直接md5加密存到到資料庫
2、md5兩次存到資料庫
3、對需要加密的字元串和一個常量 進行混淆加密
4、生成一個隨機的變數存到資料庫中,然後對需要加密的字元串和這個隨機變數加密
<?php
$str="admin";//需要加密的字元串
$str2="php";//增加一個常量混淆
$pass1=md5($str);
$pass2=md5(md5($str));
$pass3=md5($str.$str2);
echo$pass1."<br>".$pass2."<br>".$pass3;
?>
輸出:
$str="admin";//需要加密的字元串
$encrypt=$row['encrypt'];//生成的隨機加密字元串存到資料庫中
$pass4=md5($str.$encrypt);
//
『玖』 資料庫中密碼怎麼存放
我以前寫資料庫的時候是用MD5加密到資料庫的一個欄位。
但是看了一些文章說MD5也有可能破MD5的加密
如果你對加密十分在意的話,可以嘗試多種辦法,如果只是一般加密的話,普通人一般不會花太大的氣力去破界MD5的,放心去做把
『拾』 資料庫儲存密碼
一般密碼使用hash編碼進行存儲,當用戶注冊是要把用戶輸入的密碼轉換為
md5
或者
sha1
編碼,用戶登陸的時候,把用戶輸入的密碼轉換在和資料庫中存入的數據對比,如果相同就登陸成功。