之前若是咱們忘記了登陸密碼,一般能夠經過「找回密碼」這樣的方式拿回密碼,那說明你的隱私數據在他們的數據庫中是明文保存的,如今請切記:若是哪一個平臺還有這樣的方式請馬上立刻註銷你的帳號,並避免在任何其餘平臺使用這個平臺使用過的密碼。請堅信:在網絡世界中,只要是明文存在或可逆的東西,都是不安全的。沒有哪家公司會告訴你他們的數據庫被拖庫過,你更沒法想象如今的黑色產業早已讓你毫無隱私。ios
千萬別一個密碼走天下,必定要按期改密碼!git
這一篇文章,咱們就以「用戶輸入密碼,登陸,服務端驗證用戶信息,用戶上傳隱私數據」這個常見場景爲例,分享一些密碼學常識和加密時經常使用的防破解技巧,至於上述算法相關API的使用,文末我會附上iOS中全部經常使用加密API使用的demo,這裏就不浪費篇幅貼代碼了。先說兩個保護用戶隱私的原則:github
再瞭解下幾種算法的特色:算法
關於RSA相關知識請參考:
非對稱加密--RSA原理淺析
RSA的主場-證書籤名之OpenSSL演示數據庫
這裏再也不贅述。macos
也就是常說的散列函數,嚴格意義上它並非一種加密算法,但它經常與加密算法一塊兒出現,做爲一種組合方式。哈希具備如下特色:編程
知道了每種算法的特色,回到應用場景:用戶輸完密碼點擊登陸時,咱們如何保證用戶信息是足夠安全的呢?安全
如今用戶登陸成功,如今要上傳一份敏感數據,咱們如何保證數據的完整性呢?結合上面的分析,推薦AES的CBC加密方式,安全性高,還能保證完整性,數字簽名一樣也能夠驗證數據完整性,用RSA對數據的hash值進行加密,服務端接收完數據後,用私鑰解密獲得hash值,與接收數據的hash值做比對。bash
iOS中常見加密算法的使用:EncryptDemo
在Demo中,對稱加密AES的加密解密函數:服務器
CCCryptorStatus CCCrypt(
CCOperation op, /* kCCEncrypt, etc. */
CCAlgorithm alg, /* kCCAlgorithmAES128, etc. */
CCOptions options, /* kCCOptionPKCS7Padding, etc. */
const void *key,
size_t keyLength,
const void *iv, /* optional initialization vector */
const void *dataIn, /* optional per op and alg */
size_t dataInLength,
void *dataOut, /* data RETURNED here */
size_t dataOutAvailable,
size_t *dataOutMoved)
API_AVAILABLE(macos(10.4), ios(2.0));
複製代碼
調用CCCrypt時,用戶敏感數據不要直接做爲參數傳遞,不然逆向很容易hook到,一般的作法是對敏感數據作異或、加鹽等處理,具體根據須要本身設計。
iOS app簽名機制詳解 推薦閱讀:
iOS應用簽名(上)
iOS應用簽名(下)
iOS中對鑰匙串的操做推薦:SSKeyChain
老規矩,有錯誤請積極指正,有問題請踊躍留言。
更多一手好文更新,請關注個人我的微信公衆號:面向將來編程 撒花✧(≖ ◡ ≖✿)