首先,何为hash?一般在iOS中hash应用于哪些方面?
hash,知道的人一般都会想到散列这个名词,它是通过一种算法,将任意长度的输入,转换成一个固定长度的输出。对于hash,有以下这些特点:
1、算法公开
2、相同的数据,每次得到的hash是相同的
3、对于不同数据,运算结果长度一样,比如MD5
4、无法逆运算
5、可以用作数据的“指纹”识别
hash的用途,在iOS中一般有以下一些地方:
1、用户的密码加密
2、搜索引擎
3、版权
4、数字签名
这里,重点讲一下用户密码加密和数字签名,一个APP用户注册登录的过程,就是一个用户密码加密和数字签名的很好的应用场景,先看下面两张图:
![](https://img.haomeiwen.com/i10378163/64a22d65137eaf22.png)
可以看到,注册过程,就可以用数字签名,来很好的保证我们数据传输的安全性。数字签名的几大步骤:
1、一般我们先将数据有效的进行一个排序,保证服务端和客户端两边的数据排列的一致性,然后将客户端数据进行一个MD5算法运算。
2、将MD5之后的数据,一般是一个较小的固定数据,我们可以用公钥,进行一次RSA加密。
3、将RSA加密之后的密文,跟用户注册数据信息一起传递给服务端。
4、将客户端传过来的RSA加密之后的密文进行解密。
5、服务端先将用户注册数据信息用客户端一样的排序方式进行排序,然后MD5。将得到的MD5跟4步骤中解密之后的结果进行对比,对比一致则说明正确。
![](https://img.haomeiwen.com/i10378163/3c0a950f6739aa26.png)
而登录的过程,就是一个密码加密,一般我们会用HMAC,来完成这个密码加密的过程,因为原则上来说HMAC是一个算法原理,而不是一个算法,流程如下:
1 使用一个密钥加密,然后做两次hash散列。
2 把散列得到的hash值,加上从服务端得到的时间戳进行MD5。
3 将MD5之后的数据传递给服务端,服务端用同样密钥加数据库密码信息加密、散列,然后加上时间戳MD5进行比对。
在HMAC的过程中,有几个特点:
1、密钥是可以动态修改的,每次更换设备,用户重新登录时,可以换新的密钥进行加密
2、加上时间戳的验证,可以很好的避免每次发送数据的固定化,提高数据的安全性
3、完全可以做到,一个用户一个密钥,即使当前用户密钥丢失,也不会影响其他用户信息的安全性
以上就是hash的一些应用场景的描述,笔者也是大概说了一下使用场景的原理性知识,希望大家有不同意见,可以给与指导。
网友评论