zoukankan      html  css  js  c++  java
  • HMAC的通俗解释及应用

    参考链接:https://www.zhihu.com/question/19816240
    参考链接:https://www.cnblogs.com/shoshana-kong/p/11497676.html

    1.可以验证对端用户的合法性

    HMAC算法的典型应用

    HMAC算法的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下:

    (1) 先由客户端向服务器发出一个验证请求。

    (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

    (3) 客户端将收到的随机数与自己的密钥进行HMAC-SHA1运算并得到一个结果作为认证证据传给服务器(此为响应)。

    (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-SHA1运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户 。
    2.发消息给对方(或从对方接收消息)

    比如你和对方共享了一个密钥K,现在你要发消息给对方,既要保证消息没有被篡改(完整性),又要能证明信息确实是你本人发的(源认证),那么就把原信息和密钥K经HMAC计算的值一起发过去。对方接到之后,使用自己手中的密钥K和原消息计算一下HMAC的值,如果和你发送的HMAC一致,那么可以认为这个消息既没有被篡改也没有冒充。

    作者:turing
    链接:https://www.zhihu.com/question/19816240/answer/67735196
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    3.MD5普通散列算法和HMAC-MD5的区别

    MD5就是通过散列对要输出的数据进行摘要,接收到数据时,再同样进行MD5散列,与给定的MD5散列值比较,一致不一致就很清楚了。

    通常来说,传输的数据和MD5是不同的渠道给出的,比如网页上显示MD5,下载链接是某个镜像网站的。

    如果要通过同一个渠道发送数据和散列值的话(比如消息认证码),就要考虑数据和MD5同时被篡改的问题,如果第三方修改了数据,然后进行MD5散列,并一块发给接收方,接收方并不能察觉到数据被篡改。

    HMAC-MD5就可以用一把发送方和接收方都有的key进行计算,而没有这把key的第三方是无法计算出正确的散列值的,这样就可以防止数据被篡改。

    作者:用心阁
    链接:https://www.zhihu.com/question/19816240/answer/67698172
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Iframe和Frame中实现cookie跨域的方法(转载)
    android中拷贝assets下的资源文件到SD卡中(可以超过1M)
    OpenSL ES 查询设备支持的SL Profiles
    NDK开发中的一个HTTP下载实例附带下载进度
    android中配置文件property的用途以及使用<转>
    Eclipse 工程使用相对路径导入Jar包设置
    Android 解压zip文件(支持中文)
    c++实现一个比较两个string类型的版本号的小demo
    linux c++下载http文件并显示进度<转>
    Linux下类似windows下_beginthread和_endthread 的多线程开发
  • 原文地址:https://www.cnblogs.com/paddingtoneyes/p/13443525.html
Copyright © 2011-2022 走看看