gpt4 book ai didi

cryptography - HMAC 实现 - 伪代码

转载 作者:行者123 更新时间:2023-12-01 21:26:31 27 4
gpt4 key购买 nike

我必须实现自己的 HMAC-SHA256 以在嵌入式项目中使用。我无法让它发挥作用。我什至无法获得手工计算的伪代码来工作,所以我知道我做错了什么!

我的伪代码计算。按照维基百科中的图表

 1 function hmac (key, message)
2 if (length(key) > blocksize) then
3 // keys longer than blocksize are shortened
4 key = hash(key)
5 end if
6 if (length(key) < blocksize) then
7 // keys shorter than blocksize are zero-padded
8 key = key ∥ zeroes(blocksize - length(key))
9 end if
10
11 // Where blocksize is that of the underlying hash function
12 o_key_pad = [0x5c * blocksize] ⊕ key
13 i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)
14 // Where ∥ is concatenation
15 return hash(o_key_pad ∥ hash(i_key_pad ∥ message))
16 end function

当我对 key="mykey"和 message="helloworld"进行手动计算时,我得到以下结果:

key = 0x6d796b6579000000000000000000000000000000000000000000000000000000

o_key_pad = 0x31253739255c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c

i_key_pad = 0x5b4f5d534f363636363636363636363636363636363636363636363636363636

哈希(i_ke​​y_pad∥消息)= 6fb2e91de7b8b5ec6283846ff7245cd6eb4a4fd26056b529bd42d99fcf3314d2

以及0d76a16089f85cd2169bb64b6f2c818e6a404a218896483fcd97fee5cce185ae的整体hmac

最佳答案

在固定 key 长度并计算内部和外部填充时,需要使用底层哈希函数的 block 大小,这与其输出相同尺寸。这是函数操作的输入 block 的大小。对于 SHA256, block 大小为 512 位(64 字节),输出大小为 256 位(32 字节)。

如果您使用 32 作为 block 大小,您将获得结果。

使用正确的长度 block 大小,keyo_key_padi_key_pad 基本相同,只是尾随 00 长度的两倍分别为 5c36 字节。

内部哈希的结果(即hash(i_key_pad ∥ message)是:

8bf029764919f9e35249d0d55ffb8fd6c62fe23a85c1515e0120c5005aa813d5

最终值(hash(o_key_pad ∥ hash(i_key_pad ∥ message))))为:

7fdfaa9c9c0931f52d9ebf2538bc99700f2e771f3af1c1d93945c2256c11aedd

这与我从 OpenSSL 的 HMAC 实现中获得的结果相匹配。

关于cryptography - HMAC 实现 - 伪代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com