移動APP怎樣儲存使用者password

2021-09-07 13:07:23 字數 2405 閱讀 7569

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

解決辦法大概有一下幾種:

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是通過...