概述
散列函数
:又称哈希函数
,散列算法
,是一种从任何一种数据中创建小的数字“指纹
”的方法。它使用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传输已经不再安全了,因为简单的密码,会通过网站(https://www.cmd5.com)查出来
比如在 Terminal 中加密密码:1q2w3e --> 对应的 MD5 是 3fde6bb0541387e4ebdadf7c2ff31123
image
一下就是在网站去查询的结果,所以MD5相对不再安全了。
image
- MD5 加盐(动态盐)
- 直接使用 MD5 加密不行,我们可以加点佐料,让他变的复杂起来。
这样还是只能相对安全,如果获取到了你的 salt,那么还是会被破译。pwd = (pwd + salt).MD5
- 动态盐就是,从服务器派发的加密字符串(足够复杂的一个字符串),这样破译难道就加大了
- HMAC 加密方法(重点阐述)
- HMAC是啥:它是使用密匙,进行
两次Hash
(两次散列) - 开发过程中服务器分发这个
key
, Client 保存在本地,后面请求就是用这个key。- 那么这个
key
在什么时候获取了,有两种情况:- 首次注册,发送给客户端
- 新设备登录(登录成功后)
- 那么这个
- HMAC是啥:它是使用密匙,进行
这个 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二进制代码
CBC
openssl enc -aes-256-cbc -iv 010203040506 -K 616263 -nosalt -in msg.txt -out msg.bin
iv: 是初始化向量,例如:时钟的9点钟方向等
网友评论