之前若是咱们忘记了登陆密码,一般能够经过“找回密码”这样的方式拿回密码,那说明你的隐私数据在他们的数据库中是明文保存的,如今请切记:若是哪一个平台还有这样的方式请马上立刻注销你的帐号,并避免在任何其余平台使用这个平台使用过的密码。请坚信:在网络世界中,只要是明文存在或可逆的东西,都是不安全的。没有哪家公司会告诉你他们的数据库被拖库过,你更没法想象如今的黑色产业早已让你毫无隐私。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
老规矩,有错误请积极指正,有问题请踊跃留言。
更多一手好文更新,请关注个人我的微信公众号:面向将来编程 撒花✧(≖ ◡ ≖✿)