zoukankan      html  css  js  c++  java
  • hmac算法 ——就一个hash+xor 感觉不安全啊 抗彩虹表攻击和穷举攻击都比较弱

    密钥散列消息认证码(英语:Keyed-hash message authentication code),又称散列消息认证码Hash-based message authentication code,缩写为HMAC),是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个加密密钥。它可以用来保证数据的完整性,同时可以用来作某个消息的身份验证

    定义

    根据RFC 2104,HMAC的数学公式为: {displaystyle { extit {HMAC}}(K,m)=H{Bigl (}(K'oplus opad);||;H{igl (}(K'oplus ipad);||;m{igr )}{Bigr )}}{displaystyle {	extit {HMAC}}(K,m)=H{Bigl (}(K'oplus opad);||;H{igl (}(K'oplus ipad);||;m{igr )}{Bigr )}}

    其中:

    H为密码散列函数(如MD5或SHA-1)
    K为密钥(secret key)
    m是要认证的消息
    K'是从原始密钥K导出的另一个秘密密钥(如果K短于散列函数的输入块大小,则向右填充(Padding)零;如果比该块大小更长,则对K进行散列)
    || 代表串接
    ⊕ 代表异或(XOR)
    opad 是外部填充(0x5c5c5c…5c5c,一段十六进制常量)
    ipad 是内部填充(0x363636…3636,一段十六进制常量)

    实现

    下面的伪代码展示了如何实现HMAC。当使用以下散列函数之一时,块大小为64(字节):SHA-1、MD5、RIPEMD-128/160[1]

     function hmac (key, message) {
        if (length(key) > blocksize) {
            key = hash(key) // keys longer than blocksize are shortened
        }
        if (length(key) < blocksize) {
            // keys shorter than blocksize are zero-padded (where  is concatenation)
            key = key ∥ [0x00 * (blocksize - length(key))] // Where * is repetition.
        }
       
        o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
        i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)
       
        return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where  is concatenation
    }
    

    相关条目

    参考文献

    1. ^ RFC 2104, section 2, "Definition of HMAC", page 3.
  • 相关阅读:
    汽车文化【1196】
    西方经济学
    计算机组成原理【0013】
    C语言程序设计【0039】
    教育学【0405】
    管理学[9080]
    专业英语【0089】
    计算机基础1056
    letcode每日一题-上升下降字符串
    Flowable学习-flowable
  • 原文地址:https://www.cnblogs.com/bonelee/p/12926775.html
Copyright © 2011-2022 走看看