如何通过 CLI 为 rfc4226 提供计数器到 OpenSSL HMAC 函数?

如何通过 CLI 为 rfc4226 提供计数器到 OpenSSL HMAC 函数?

我在通过 CLI 使用 OpenSSL HMAC 提供计算一次性密码所需的计数器时遇到了问题。我认为我的问题在于计数器的编码。我无法在 RFC 中重现测试向量:

计数十六进制 HMAC-SHA-1(秘密,计数) 0 cc93cf18508d94934c64b65d8ba7667fb7cde4b0 1 75a48a19d4cbe100644e8ac1397eea747a2d33ab

我试过了:

回显-n“ 1” | openssl dgst-sha1-hmac“ 12345678901234567890”

我也尝试过 echo -e“\001”。

答案1

你的第二次尝试很接近了,但请注意,计数器始终8 个字节(大端字节序)。因此,如果计数器数值为 1,则它将以字节形式输入到 HMAC 00 00 00 00 00 00 00 01

$ echo -e -n '\x00\x00\x00\x00\x00\x00\x00\x00' | openssl dgst -sha1 -hmac 12345678901234567890
(stdin)= cc93cf18508d94934c64b65d8ba7667fb7cde4b0

$ echo -e -n '\x00\x00\x00\x00\x00\x00\x00\x01' | openssl dgst -sha1 -hmac 12345678901234567890
(stdin)= 75a48a19d4cbe100644e8ac1397eea747a2d33ab

为了进行比较,如果你用 Python 实现它:

key = b"12345678901234567890"
counter = 1
msg = struct.pack(">Q", counter)
result = hmac.HMAC(key, msg, hashlib.sha1)

相关内容