根据我阅读的有关使用HMAC SHA256的各种文档,我了解:

H(K XOR opad,H(K XOR ipad,文本)),其中我的情况是H为SHA256。

但是,SHA256输入只有一个参数,即消息。
而H(K,text)有两个输入。
那么如何计算H(k,text)?

我应该先用k对文本进行编码,然后再使用H(encoded_text)来将“encoded_text”用作消息吗?

谢谢你

最佳答案

  • H()是您的加密哈希函数,在这种情况下为SHA256()但
    也可以是MD5或其他名称;
  • K是您的预定义 key
  • 文本是要验证的消息
  • opad是外部填充(0x5c5c5c…5c5c,一个块长的十六进制
    常量)
  • ipad是内部填充(0x363636…3636,一个块长的十六进制
    常量)
  • 然后通过
  • 在数学上定义HMAC(K,m)

    HMAC(K,m)= H((K⊕opad)∥H((K⊕ipad)∥m))。
  • 块大小由您的哈希函数确定(MD5为64
    字节)
  • o_key_pad = [opad *块大小]⊕键
  • i_key_pad = [ipad *块大小]⊕键

  • 您的结果将是:
    H(o_key_pad || H(i_key_pad || TEXT))
    

    您可以在这里找到不错的阅读:
    http://timdinh.nl/index.php/hmac/

    还有以下几乎类似于我的伪代码:
    function hmac (key, message)
        opad = [0x5c * blocksize] // Where blocksize is that of the underlying hash function
        ipad = [0x36 * blocksize]
    
        if (length(key) > blocksize) then
            key = hash(key) // Where 'hash' is the underlying hash function
        end if
    
        for i from 0 to length(key) - 1 step 1
            ipad[i] = ipad[i] XOR key[i]
            opad[i] = opad[i] XOR key[i]
        end for
    
        return hash(opad || hash(ipad || message)) // Where || is concatenation
    end function
    

    关于sha256 - 如何使用HMAC SHA256?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11415055/

    10-12 14:24