移動APP如何儲存使用者密碼

2021-06-29 05:31:47 字數 2290 閱讀 5207

儲存了使用者資訊便涉及到了安全問題.

解決的方法大概有一下幾種:

1.首先,如果客戶端和服務端都是你來設計開發,那麼有兩種比較可靠的方案

a.客戶端將密碼hash加密,登入成功後將hash值儲存到sqlite.服務端得到使用者名稱和hash值,採用同樣的演算法對密碼進行hash運算,然後和使用者傳來的hash值進行比較,一致則登入成功.更加可靠的是對密碼加鹽加密.例如可以採用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值,然後採用同樣的演算法對資料庫裡面的密碼進行計算

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一致,則登入成功.同時客戶端將加密後的字串儲存到本地資料庫,下次登入時直接從資料庫讀取.

b.使用非對稱加密演算法對密碼進行加密.

客戶端使用公鑰加密密碼,得到加密串,然後將其傳送到服務端.

服務端使用私鑰解密密碼,進行驗證,

登入成功後,客戶端將加密串儲存到本地,便於下次自動登入;

使用非對稱加密比較可靠,即使加密串被洩露也無法得到密碼.

2.如果你只是負責客戶端,對服務端無能為力,那麼你可能只能使用對稱加密了.(如你正在為學校圖書館寫個客戶端,你還想設定自動登入,那麼你本地只能使用對稱加密了,將加密串儲存到本地,然後下次自動登入時,從資料庫取出加密串然後解密...服務端只識別原始的密碼)

這種情況,你只能考慮如何生成加密金鑰,以及如何儲存金鑰,如何混淆.

考慮了一種方法:

加解密函式 des(passwd,key,encode);

str1 =  des(passwd,key,encode);

str2 =  des(key,str1,encode);

本地資料庫中儲存 str1:str2.

解密時,str2以str1解密得到key.

然後,str1以key解密得到passwd.

非對稱加密只能以這種邏輯上的複雜度增加密碼的強度.

3. 使用jni加解密。

另參考文章:

android中使用jni對字串加解密實現分析

加鹽密碼雜湊:如何正確使用

移動App該如何儲存使用者密碼

這個實際上和桌面程式是一樣的。參考 桌面qq在2012的時候把密碼md5計算之後,儲存到本地加密的sqlite資料庫裡。參考 手機 是通過本地des加密,再把密碼儲存到本地檔案裡的,如果拿到root許可權,能破解出密碼明文。參考 我實際測試了下,可以輕鬆得到所有帳號的密碼明文。參考 linux是通過...

移動App該如何儲存使用者密碼

這個實際上和桌面程式是一樣的。參考 桌面qq在2012的時候把密碼md5計算之後,儲存到本地加密的sqlite資料庫裡。參考 手機 是通過本地des加密,再把密碼儲存到本地檔案裡的,如果拿到root許可權,能破解出密碼明文。參考 我實際測試了下,可以輕鬆得到所有帳號的密碼明文。參考 linux是通過...

移動App該如何儲存使用者密碼

update 2018 06 04 2015年出的乙個規範 json web token jwt jwt 官網 八幅漫畫理解使用json web token設計單點登入系統 json web encryption jwe json web signature jws update 2017 9 6 ...