HASH概述
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
Hash的特点
算法是公开的
对相同数据运算,得到的结果是一样的
对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)。
这玩意没法逆运算
信息摘要,信息“指纹”,是用来做数据识别的。
用途
用户密码的加密
搜索引擎
版权
数字签名
密码加密
通过运用HASH算法,给用户的密码进行加密,服务器不需要知道用户真实密码,只需要匹配HASH值
1.直接MD5,轻易反查询(CMD5)
2.加盐,不使用固定盐
3.HMAC方案,通过动态KEY两次做两次hash
4.加时间戳
数字签名
为什么用签名这个词.因为老外喜欢用支票,支票上面的签名能够证明这玩意是你的.那么数字签名顾名思义,就是用于鉴别数字信息的方法
对称加密
DES 数据加密标准(用得少,因为强度不够)
3DES 使用3个密钥,对相同的数据执行3次加密,强度增强
AES 高级密码标准。
应用模式
ECB(Electronic Code Book):电子密码本模式。每一块数据,独立加密。
最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
CBC(Cipher Block Chaining):密码分组链接模式。使用一个密钥和一个初始化向量[IV]对数据执行加密。
明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。
CBC可以有效的保证密文的完整性,如果一个数据块在传递是丢失或改变,后面的数据将无法正常解密。
openssl命令
加密:
AES(ECB)加密“hello”字符串
echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
解密:
AES(ECB)解密
echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d
网友评论