浅谈 Hash

概述

散列函数:又称哈希函数散列算法,是一种从任何一种数据中建立小的数字“指纹”的方法。它使用128位,32个字符,16进制表示。(为何是32个字符,由于在16进制中一个字符是0.5个字节,二进制是:128 / 8 = 16,那么十六进制就是:128 / 8 * 2 = 32)算法

特色

  • 不可逆性
  • 对于相同的数据,每次加密以后的结果是固定的
  • 算法是公开的
  • 用来作数据识别

经常使用的几种对称加密方式

  • DES(Data Encryption Standard): 它是使用56位的对称加密算法,由于位数太少,已经被人破译,因此被取而代之的是AES加密方式。
  • 3DES:使用3个密钥,对相同数据进行三次加密
  • AES(Advanced Encryption Standard): 高级加密标准,密钥长度分别是128,192,256位

密码加密方式

  • 直接是用MD5
    • 目前直接使用MD5传输已经再也不安全了,由于简单的密码,会经过网站(www.cmd5.com)查出来
    好比在 Terminal 中加密密码:1q2w3e --> 对应的 MD5 是 3fde6bb0541387e4ebdadf7c2ff31123
    复制代码
    一下就是在网站去查询的结果,因此MD5相对再也不安全了。
  • MD5 加盐(动态盐)
    • 直接使用 MD5 加密不行,咱们能够加点佐料,让他变的复杂起来。
    pwd = (pwd + salt).MD5
    复制代码
    这样仍是只能相对安全,若是获取到了你的 salt,那么仍是会被破译。
    • 动态盐就是,从服务器派发的加密字符串(足够复杂的一个字符串),这样破译难道就加大了
  • HMAC 加密方法(重点阐述)
    • HMAC是啥:它是使用密匙,进行两次Hash(两次散列)
    • 开发过程当中服务器分发这个 key, Client 保存在本地,后面请求就是用这个key。
      • 那么这个 key 在何时获取了,有两种状况:
        • 首次注册,发送给客户端
        • 新设备登陆(登陆成功后)

这个 Data 是服务器下发的时间戳,通常精确到分钟例如(201812091411)。客户端在回传时,给服务器。 那么服务器会是怎么处理了:

C --> 发送数据: pwd = (pwd + (hmac + salt) + date).md5
S --> 接受到数据:先校验date
例如:
服务器下发的是 201812091411, 客户端回传的时 201812091411,可是如今服务器时间是 201812091412,
那么时间对不上,该怎么办?此时服务器会减去一分钟(201812091411)再做对比,此时两个时间是相等的。
服务器就能够作接下来的处理,若是超过服务器限定的时间,就超时,让其从新请求。
复制代码

数字签名

  • 概念:就是把数据的Hash值经过RSA加密,而后一块儿发送给服务器的形式。
  • 处理过程:客户端发送包(原始数据 + (原始数据的Hash + RSA)),服务器接收到后,先经过RSA解密,解出RSA加密的数据(原始数据的Hash),在求原始数据的Hash值,若是两个hash相等,那么就证实数据没有被篡改。

应用

应用模式

  • ECB(Electronic Code Book)
    • 电子密码本模式,每一块数据,独立加密 ,无初始化向量
  • CBC(Cipher Block Chaining)
    • 密码分组连接模式,使用一个密钥和一个初始化向量[IV]对数据执行加密
    • 能够有效保证密文的完整性,若是在传输数据时,一个数据块丢失或改变,后面的数据将没法正常解密

ECB 安全

openssl enc -aes-128-ecb -K 616263 -nosalt -in msg.txt -out msg.bin
616263: 是key值是abc二进制代码
复制代码

CBCbash

openssl enc -aes-256-cbc -iv 010203040506 -K 616263 -nosalt -in msg.txt -out msg.bin
iv: 是初始化向量,例如:时钟的9点钟方向等
复制代码