最近在寫乙個web專案時,需要在資料庫中將使用者密碼等一類資訊進行加密處理。資料加密演算法有許多 ,各有各的優缺點;在 一文中對各種加密演算法進行了介紹。之前,有對資料進行加密,由於許久沒寫,在加密處理上出了一些問題。找了一些部落格,但沒能很好解決問題。 本次專案的加密,採用的是md5加密,md5是乙個安全的雜湊演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密md5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用md5演算法雜湊之後,把得到的雜湊值和原始的資料形成乙個一對一的對映表,通過比在表中比破解密碼的md5演算法雜湊值,通過匹配從對映表中找出破解密碼所對應的原始明文。
第一步: 建立md5help類
1view codepublic
static
string encryptstring(string
str)217
//返回加密字串
18return
sb.tostring();
192021}
22 }
第二步:對需要加密資料進行加密
例如對字串 string str =admin" 加密;
呼叫方法: md5helper.encryptstring(string str)。得到返回字串結果:21232f297a57a5a743894a0e4a801fc3,資料庫儲存結果: 21232f297a57a5a743894a0e4a801fc3
第三步:獲取驗證資料與加密資料進行對比
對驗證資料,呼叫 md5helper.encryptstring(string str) 方法.,得到加密後資料 與資料庫儲存資料進行對比.但需要強調的是 ,驗證資料需要呼叫兩次加密方法。
string str2 = md5helper.encryptstring( md5helper.encryptstring(str))
最初,我一直加密一次驗證資料與資料庫中加密資料進行對比,結果一直通不過。通過除錯程式,發現:
從資料庫取出已經加密的資料為:c3284d0f94606de1fd2af172aba15bf3 。這與「admin」資料第一次加密資料不同。因此,我對資料進行兩次加密,得到以下結果:
第一次加密結果為:21232f297a57a5a743894a0e4a801fc3
第二次加密結果為:c3284d0f94606de1fd2af172aba15bf3
驗證資料第二次加密結果與資料庫獲取加密資料一致。
在解決驗證資料與資料庫密碼的對比之後,還發現乙個問題。我採用的是sql server 資料庫,資料庫是別人建立好後給我。由於每個人設定不同,資料庫編碼不同,資料庫編碼格式不同,需要對md5helper類中的**進行改造:
//將字串轉換為位元組陣列
byte byteold = encoding.getencoding("gbk").getbytes(str);
對於這段**需要根據資料庫的編碼格式進行改造,資料編碼為utf-8的需要將getencoding 設定為utf-8.對於如何查詢 資料庫的編碼格式,,可以參考這篇文章:
------- - ------查詢sql server 編碼格式.
關於 SQL Server 資料庫
表 包含資料庫中所有資料的資料庫物件,由行和列組成,用於組織和儲存資料。字段 表中的列稱為乙個字段,字段具有自己的屬性,如欄位型別 字段大小等。基本字段型別 字元型 文字型 數值型 邏輯型 日期時間型。索引 單獨的 物理的資料庫結構,依賴於表建立,使資料庫程式無須對整個表進行掃瞄,就可以找到所需資料...
關於獲取debug keystore的MD5問題
根據android開發者 提供的示例 keytool list alias androiddebugkey keystore keystore storepass android keypass android 實際以本地的位置為例,應該如下 keytool list alias androidde...
關於MD5加密
前言 任何以明文方式儲存使用者密碼的行為都是耍流氓。md5作為一種單項加密方式,常用在資料脫敏和軟體數字簽名等方面。以下是介紹正文 md5的全稱是message digest algorithm 5 資訊 摘要演算法 在90年代初由mit laboratory for computer scienc...