iOS逆向安防从入门到秃头--RSA&HASH加密

903 阅读4分钟

小谷秃头合集

  • 日常开发中,兄弟们或多或少都会用到加密。今天稍微聊一下RSA&HASH

1. RSA 非对称加密

1.1. RSA 的特点

  • RSA加密的效率比较低(公钥加密-私钥解密私钥加密-公钥解密

  • RSA加密的安全性还是比较高的(由于中间传输的数据都是加密数据、不好破解)

1.2. iOS中使用 RSA 非对称加密

iOS中使用公钥和私钥。是.der.p12文件。

1.2.1. .der.p12文件文件生成

    1. 生成秘钥文件private_key.pem(这里也可以写成2048字节,不过一般都是1024字节) openssl genrsa -out private_key.pem 1024

1.png

    1. 请求文件csr的生成(通过私钥文件)

openssl req -new -key private_key.pem -out rsacert.csr

2.png

填一些请求信息

    1. 获取自签文件crt openssl x509 -req -days 3650 -in rsacert.csr -signkey private_key.pem -out rsacert.crt

3.png

这个有效期是10年

    1. 通过crt获取公钥文件.der(在iOS开发中使用)

openssl x509 -outform der -in rsacert.crt -out rsacert.der

    1. iOS中使用的私钥.p12文件生成(这里设置的密码要记住)

openssl pkcs12 -export -out p.p12 -inkey private_key.pem -in rsacert.crt

4.png

    1. 文件展示一波~

5.png

1.2.2. RSA代码测试

6.png

上面其实就是RSA的用法。一般情况就是客户端(client)保存公钥服务器(server)保存私钥,用来加密关键数据(这个数据不能是大数据,因为RSA效率并不高

2. HASH 加密

  • 兄弟们平常开发中用到的MD5其实就是一种HASH

HASH是一种思想,他包括MD5,但不是MD5

2.1. HASH 的特点

  • HASH不可逆运算(意思就是变了之后就变不回来了)

传说中的HASH找值CMD5,是人家搜集了成千上万的数据,去查表。

  • HASH经常用在密码加密(这个兄弟们应该都用过的)

  • HASH加密之后长度一样的,32个字符(16进制表示的)

  • 主要用于验证数据

2.2. 代码使用

7.png

具体的实现,网上太多了,这里就不说了

2.3. 加盐

由于CMD5网站的出,使得单纯的密码没有想象中的那么安全

  • 所以我们想到了加盐~(所谓的加盐就是给他拼接一段数据)

8.png

2.4. HMAC加盐

上面加盐写在客户端是固定的,所以说所有用户就公用一个,还是有点不好

  • 现在用的比较多的还是HMAC(据说比较安全,我工程中还没有用到~哈哈哈)

9.png

其实这也算是加盐~ 不过这个,是从服务器上取得,就相对安全了点

3. 密码登录

说了一些加密方式(对称加密以后在说~)

3.1. 项目中的登录

兄得们 都是知道的,用户的密码,开发者绝对不能知道的。

  • 先说下我们项目的登录(兄弟们,大大们,我说完别攻击啊,要不我就是罪人了~(不过也没啥好攻击的~小破公司))

  • 我们公司就是典型的账号密码登录

  • 密码传给服务器的是HASH

  • 存入数据库的是HASH

  • 验证的是HASH

都是HASH

3.2. 自己理想设计的登录

  • 男人吗~ 都会有点理想,奈何我职位比较低,说了也不算,就只能和兄弟们在这个口嗨下~哈哈哈

我没有办法测试。leader用30秒怼回来了~(原因是:1.现在的还可以用、2、IPA的DAU就那么一点,不用搞这么复杂~:他说服我了,我觉得他说的对~)),诶呀,我这个人就是太容易听取别人的意见了~

  • 但是我还是要把自己的想法写出来(兄得们看看好不好~,不好的话希望可以指点下~)

虽然可能还是欠缺很多,但是我 感觉只HASH还是不太安全,毕竟有那个网站

3.2.1. 注册流程

10.png

3.2.2. 登录流程

11.png

3.2.3. 用户换手机的情况

12.png

这个是我想像的,但是我能力和权利都有限,不能试验。以后的幸福生活就靠兄弟们了~

4. 数字签名

  • 数字签名就好说点了~

  • 感觉在做过支付的兄弟们面前有点班门弄斧了~

  • 简单来说就是把重要数据传过来的时候,把数据的HASH值带上,在用RSA加密HASH值,保证数据的可靠性(防止拿到被人篡改的信息)

  • 小谷还是要画图

13.png

如果中间数据被篡改过,那么客户端对比的HASH就不同,这段数据我们就会丢弃不用~

5. 总结

  • 开发中用到RSA&HASH加密的不少。可以稍微了解下

  • 希望这些知识给大家带来一些帮助吧~(小谷是个汉子,不太会说矫情的话,哈哈哈)