gpt4 book ai didi

c - 使用 sha512 和使用 sha1 时的一次性密码算法是否有具体区别

转载 作者:行者123 更新时间:2023-11-30 17:14:15 24 4
gpt4 key购买 nike

我正在编写一个 pam 模块,它使用一次性密码进行身份验证。我开始使用 sha512 作为 hmac 算法来编写它,但遇到了问题。我也用 sha1 做到了,它有效。代码位于:https://github.com/Ongy/pam_totp

我用 sha512 测试了 hmac,据我所知这是正确的,所以错误应该出现在 get_truncate 函数中,该函数适用于 sha1,但不适用于 sha512。

static int get_truncate(const uint8_t * hash, size_t len, char * buffer,
size_t maxlen)
{
uint32_t value;
uint8_t offset;
offset = hash[len-1] & 0x0F;
value = *((uint32_t *) (hash+offset));
value = be32toh(value) & 0x7FFFFFFF;
value %= 100000000;

return snprintf(buffer, maxlen, "%08d", value);
}

被调用

static int get_totp_sha512(const uint8_t * hashdata, size_t len, uint64_t time,
char * dst, size_t maxlen)
{
uint8_t buffer[64];
uint64_t counter = htobe64(time);

memset(buffer, 0, sizeof(buffer));

calculate_hmac_sha512(hashdata, len, (uint8_t *) &counter,
sizeof(counter), buffer, sizeof(buffer));

return get_truncate(buffer, sizeof(buffer), dst, maxlen);
}

大部分相关代码应该在 src/main.c 中。

相关的 rfc 是:62384226 。 (第二个描述了通用算法,第一个还允许除sha1之外的其他哈希)

最佳答案

好吧,我必须修复的是我的测试用例,我使用了 https://www.rfc-editor.org/rfc/rfc6238#appendix-B 中给出的测试 vector 。我必须改变什么:

sha512 的 key 实际上不是“12345678901234567890”,而是“1234567890123456789012345678901234567890123456789012345678901234”

关于c - 使用 sha512 和使用 sha1 时的一次性密码算法是否有具体区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424405/

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