儲存了使用者資訊便涉及到了安全問題.
解決辦法大概有一下幾種:
1.首先,假設client和服務端都是你來設計開發,那麼有兩種比較可靠的方案
a.client將passwordhash加密,登入成功後將hash值儲存到sqlite.服務端得到username和hash值,採用相同的演算法對password進行hash運算,然後和使用者傳來的hash值進行比較,一致則登入成功.更加可靠的是對password加鹽加密.比如能夠採用pbkdf2加鹽加密.
public static string createhash(string password)
throws nosuchalgorithmexception, invalidkeyspecexception
/*** returns a salted pbkdf2 hash of the password.
* * @param password
* the password to hash
* @return a salted pbkdf2 hash of the password
*/public static string createhash(char password)
throws nosuchalgorithmexception, invalidkeyspecexception
加密後的字串為1000:1507039de0a3c2c88ddf896233278e37d05fd8a0fadc570d:99222374678d4afe5d7d9bf9be4786e17f045ac217c6a2ca,
1000為迭代的次數,後面各自是salt和hash值.
服務端得到這個字串後,從中解析出迭代次數,salt,hash1值,然後採用相同的演算法對資料庫裡面的password進行計算
public static boolean validatepassword(string password, string correcthash)
throws nosuchalgorithmexception, invalidkeyspecexception
/*** validates a password using a hash.
* * @param password
* the password to check
* @param correcthash
* the hash of the valid password
* @return true if the password is correct, false if not
*/public static boolean validatepassword(char password, string correcthash)
throws nosuchalgorithmexception, invalidkeyspecexception
假設hash2和hash1一致,則登入成功.同一時候client將加密後的字串儲存到本地資料庫,下次登入時直接從資料庫讀取.
b.使用非對稱加密演算法對password進行加密.
client使用公鑰加密password,得到加密串,然後將其傳送到服務端.
服務端使用私鑰解密password。進行驗證,
登入成功後,client將加密串儲存到本地,便於下次自己主動登入;
使用非對稱加密比較可靠。即使加密串被洩露也無法得到password.
2.假設你僅僅是負責client。對服務端無能為力,那麼你可能僅僅能使用對稱加密了.(如你正在為學校圖書館寫個client。你還想設定自己主動登入。那麼你本地僅僅能使用對稱加密了,將加密串儲存到本地。然後下次自己主動登入時。從資料庫取出加密串然後解密...服務端僅僅識別原始的password)
這樣的情況。你僅僅能考慮怎樣生成加密金鑰,以及怎樣儲存金鑰,怎樣混淆.
考慮了一種方法:
加解密函式 des(passwd,key,encode);
str1 = des(passwd,key,encode);
str2 = des(key,str1,encode);
本地資料庫中儲存 str1:str2.
解密時,str2以str1解密得到key.
然後。str1以key解密得到passwd.
非對稱加密僅僅能以這樣的邏輯上的複雜度新增password的強度.
3. 使用jni加解密。
另參考文章:
android中使用jni對字串加解密實現分析
加鹽password雜湊:怎樣正確使用
移動APP如何儲存使用者密碼
儲存了使用者資訊便涉及到了安全問題.解決的方法大概有一下幾種 1.首先,如果客戶端和服務端都是你來設計開發,那麼有兩種比較可靠的方案 a.客戶端將密碼hash加密,登入成功後將hash值儲存到sqlite.服務端得到使用者名稱和hash值,採用同樣的演算法對密碼進行hash運算,然後和使用者傳來的h...
移動App該如何儲存使用者密碼
這個實際上和桌面程式是一樣的。參考 桌面qq在2012的時候把密碼md5計算之後,儲存到本地加密的sqlite資料庫裡。參考 手機 是通過本地des加密,再把密碼儲存到本地檔案裡的,如果拿到root許可權,能破解出密碼明文。參考 我實際測試了下,可以輕鬆得到所有帳號的密碼明文。參考 linux是通過...
移動App該如何儲存使用者密碼
這個實際上和桌面程式是一樣的。參考 桌面qq在2012的時候把密碼md5計算之後,儲存到本地加密的sqlite資料庫裡。參考 手機 是通過本地des加密,再把密碼儲存到本地檔案裡的,如果拿到root許可權,能破解出密碼明文。參考 我實際測試了下,可以輕鬆得到所有帳號的密碼明文。參考 linux是通過...