密码学HASH与对称加密

2019-11-06  本文已影响0人  简_爱SimpleLove

HASH概述:

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。2004年,证实MD5算法无法防止碰撞(collision)(如网站:CMD5),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

MD5是哈希算法的一种。

Hash的特点:

Hash的用途:

密码加密

密码加密常见的有以下几种方式:

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。

HMAC的应用
image.png

如上图中,共有两个流程:

授权设备登录流程:
1、输入账号过后,就把账号作为参数向服务器发送请求
2、服务器根据账号生成对应的key,并传递给客户端
3、客户端拿到key,进行HMAC运算,并将运算结果的哈希值传给服务器

其他设备登录流程:
1、输入账号过后,在本地缓存中找服务器传过来的key,有就登录,没有就把账号作为参数向服务器发送请求
2、服务器要先看这个账号是否开启了设备锁,没有开启就不允许登录,开启了,就向授权设备发送请求,是否授权,如果授权,就将这个账号的key传给其他客户端
3、客户端拿到key,进行HMAC运算,并将运算结果的哈希值传给服务器

但是在这之中有一个潜在的安全隐患问题:当别人拿到账号和传递的哈希值过后,也就能拿到登录权限,从而不安全。

所以这个时候不仅需要HMAC加密,还需要添点东西了,如下:


image.png

为了防止上面的问题,注册流程不变,服务器还是保存的有加了key的HMAC哈希值。
1、只是登录的时候,客户端将哈希值与时间戳拼接过后,进行MD5加密,再传给服务器。
2、服务器将注册保存的账号对应的HMAC哈希值,分别与当前时间,和前一分钟拼接再MD5加密,再和客户端传过来的进行匹配,匹配成功则登录成功,否则不成功。
3、注意这里的时间戳是服务器给的时间戳。

注意:
关于密码安全还需注意的是密码和指纹,人脸的关系:
密码:你是这个账号的主人!
人脸、指纹:你是这个手机的主人!
支付宝那些是登录成功过后,开通指纹识别

对称加密

常见的加密算法:

应用模式:

加密的终端命令:

加密过程是先加密,再base64编码
解密过程是先base64解码,再解密

CCCrypt函数

AES加密解密都是用到的CCCrypt函数,并且需要导入CommonCrypto框架。

 /**
     1、kCCEncrypt 加密/kCCDecrypt 解密
     2、加密算法。
     3、加密选项:ECB/CBC
     4、加密的密钥
     5、密钥的长度
     6、iv 初始化向量
     7、加密的数据
     8、加密的数据长度
     9、密文的内存地址
     10、密文缓冲区的大小
     11、加密结果大小
     */
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          self.algorithm,
                                          option,
                                          cKey,
                                          self.keySize,
                                          cIv,
                                          [data bytes],
                                          [data length],
                                          buffer,
                                          bufferSize,
                                          &encryptedSize);
    ```
上一篇 下一篇

猜你喜欢

热点阅读