乙個好的資料庫加密系統,應該在保證資料安全的基礎上,盡可能的提高工作效率,在工作效率和安全性之間取得乙個平衡。總體來說滿足以下條件:
(1)md5加密演算法
在現階段,我們一般認為存在兩種加密方式,單向加密和雙向加密。雙向加密是加密演算法中最常用的,它將我們可以直接理解的明文資料加密為我們不可直接理解的密文資料,然後,在需要的時候,可以使用一定的演算法將這些加密以後的密文解密為原來可以理解的明文。雙向加密適合於隱秘通訊,比如,我們在網上購物的時候,需要向**提交信用卡密碼,我們當然不希望我們的資料直接在網上明文傳送,因為這樣很可能被別的使用者「偷聽」,我們希望我們的信用卡密碼是通過加密以後,再在網路傳送,這樣,**接受到我們的資料以後,通過解密演算法就可以得到準確的信用卡賬號。
單向加密剛好相反,只能對資料進行加密,也就是說,沒有辦法對加密以後的資料進行解密。可能我們立即就會想,這樣的加密有什麼用處?不能解密的加密演算法有什麼作用呢?在實際中的乙個應用就是資料庫中的使用者資訊加密,當使用者建立乙個新的賬號或者密碼,他的資訊不是直接儲存到資料庫,而是經過一次加密以後再儲存,這樣,即使這些資訊被洩露,也不能立即理解這些資訊的真正含義。
md5就是採用單向加密的加密演算法,對於md5而言,有兩個特性是很重要的,第一是任意兩段明文資料,加密以後的密文不能是相同的;第二是任意一段明文資料,經過加密以後,其結果必須永遠是不變的。前者的意思是不可能有任意兩段明文加密以後得到相同的密文,後者的意思是如果我們加密特定的資料,得到的密文一定是相同的。
md5cyptoserviceprovider類是.net中system.security.cryptography名字空間的乙個類,提供專門用於md5單向資料加密的解決方法,也是本文中我們用來加密資料庫中密碼的類。在真正進行資料加密之前,我們首先來了解md5cyptoserviceprovider類中的主要方法:computehash,它將輸入的明文資料陣列使用md5加密以後輸出加密後的密文資料陣列。
使用加密方式儲存到資料庫的限制:
在決定是否使用加密方式儲存密碼之前,我們還要考慮一些問題,因為md5是單次加密演算法,加密以後的資訊不可以解密,所以,如果使用者丟失密碼,任何人都很難找到使用者原來的密碼,這時候,**也就相應的失去乙個很重要的功能,那就是使用者提供其他資訊來取得忘記的密碼的功能,這不能不說是**的乙個大缺陷。另外,採用這樣的加密方式,必須完全修改以前的使用者資料,要求使用者完全重新註冊,這也是這種方法比較困難的乙個地方。
(2)密碼加密:雜湊加鹽
一般系統資料庫密碼加密方式:
缺點:黑客可以通過密碼暴力破解獲取密碼資訊,具體做法是將常用密碼進行hash後做成乙個字典,破解的時候,只需要查字典就能知道對應的明文密碼。
建議:使用以下兩種密碼策略相結合的方式去解決
解釋:以上給每個密碼加乙個隨機數後,實際上是將密碼人為地拓展了n位,導致密碼長度大增,使得攻擊者很難很難構造這麼大的乙個字典去破解。退一步講,就算攻擊者的字典足夠強大但是暴力破解所需要花費的時間代價過長從而降低了這種風險。
// 1.指定加密演算法
messagedigest digest = messagedigest.getinstance("md5");
// 2.將需要加密的字串轉化成byte型別的資料,然後進行雜湊過程
byte bs = digest.digest((psd + salt).getbytes());
// 3.遍歷bs,讓其生成32位字串,固定寫法
MD5 加密技術
工作中用到了md5 加密技術 在網上找了一同 md5 的文章 覺得這個挺好的 就放在了這裡 不知道這是哪位高人寫的 小留下了 哈哈 md5 技術加密 md5 加密 privatestring ge 5str string str catch nosuchalgorithmexception e ca...
MD5加密總結
md5訊息摘要演算法,屬於hash演算法。md5演算法對輸入任意長度的訊息進行執行,產生乙個128位的訊息摘要 32位的數字字母混合碼 不可逆相同的資料md5值一樣 壓縮性 任意長度的資料,算出的md5值長度都是固定的 容易計算 從原資料計算出md5值很容易 抗修改性 對原資料進行任何改動,哪怕只修...
資料庫MD5加密(擴充套件)
create table tes 5 id int 4 notnull name varchar 20 not null pwd varchar 50 not null primary key id engine innodb default charset utf8插入一些資料 insert in...