Hash也称散列、哈希,对应的英文都是Hash
基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的MD5和SHA都是历史悠久的Hash算法。
echo md5("这是一个测试文案"); // 输出结果:2124968af757ed51e71e6abeac04f98d
在这个例子里,这是一个测试文案
是原始值,2124968af757ed51e71e6abeac04f98d
就是经过hash算法得到的Hash值。整个Hash算法的过程就是把原始任意长度的值空间,映射成固定长度的值空间的过程。
HMAC是密钥相关的哈希运算消息认证码
HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。 HMAC算法可以用来作加密、数字签名、报文验证等
HMAC算法的定义用公式表示如下:
HMAC(K,M)=H((K’⊕opad)∣H((K’⊕ipad)∣M))
HMAC算法的加密步骤
(1) 在密钥K后面添加0 或者 对密钥K用H进行处理 来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00;如果K的字长是120字节,B=64字节,则会用H作用于K后产生64字节的字符串)
(2) 将上一步生成的B字长的字符串与ipad做异或运算。
(3) 将数据流text填充至第二步的结果字符串中。
(4) 用H作用于第三步生成的数据流。
(5) 将第一步生成的B字长字符串与opad做异或运算。
(6) 再将第四步的结果填充进第五步的结果中。
(7) 用H作用于第六步生成的数据流,输出最终结果 。
用图表示就是:
总结:HASH是一种将数据转换成数字指纹的技术,而HMAC是一种使用HASH函数和密钥来创建认证码的方法,用于验证数据的完整性和真实性。HMAC相比HASH更加安全,因为它利用了密钥来进行认证。