gpt4 book ai didi

c - 使用 OpenSSL 的 HMAC 时出现访问冲突

转载 作者:行者123 更新时间:2023-11-30 16:13:33 27 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 对某些数据执行 HMAC-SHA512。执行以下代码时出现“Exception thrown at 0x... (libcrypto-1_1-x64.dll) in Program.exe: 0xC0000005: Access violation writing location 0x... ”错误:

int main(int argc, char** argv)
{
uint8_t* data[] = { 0x14, 0xf7, 0xbd, 0x95, 0x57, 0x9a, 0x7e, 0xa1, 0x5c, 0xf7, 0x27, 0x91, 0x0d, 0x61, 0x58, 0x01, 0xa3, 0x12, 0x17, 0x54, 0x0b, 0x2e, 0xb4, 0xc5, 0xb1, 0xeb, 0xab, 0xe0, 0x43, 0x9b, 0x8e, 0x1f, 0x39, 0x7d, 0x85, 0x1a, 0x3a, 0x4b, 0x9c, 0xf4, 0xbf, 0x31, 0x55, 0x72, 0x41, 0xf5, 0xdb, 0xcb, 0xb3, 0xa6, 0xb5, 0xb8, 0x82, 0xe5, 0xef, 0x18, 0x72, 0xa0, 0x59, 0x08, 0x9b, 0xfa, 0x17, 0xa3 };
uint8_t* key = "some_rand_pw";
uint8_t* result = malloc(64);
memset(result, 0, 64);
HMAC(EVP_sha512(), key, 12, data, 64, result, (unsigned int)64); //ERROR
}

我会使用uint8_t* result = HMAC(EVP_sha512(), key, 12, data, 64, NULL, NULL) ,但它不是线程安全的,这将是一个多线程程序。有人知道我在这里做错了什么吗?

我使用的是 Visual Studio 2017,其中包含针对 Windows 预构建的 64 位 OpenSSL。

最佳答案

你的代码是错误的。 data 必须是 uint8 数组,但您将其声明为指向 uint8 的指针数组。

此外,HMAC 的最后一个参数必须是指向 unsigned int指针,但您提供了一个 unsigned int ,这就是崩溃的原因。

你的编译器应该警告你。使用 -Wall 进行编译。

更正(未经测试)的代码:

int main(int argc, char** argv)
{
uint8_t data[] = { 0x14, 0xf7, 0xbd, 0x95, 0x57, 0x9a, 0x7e, 0xa1, 0x5c, 0xf7, 0x27, 0x91, 0x0d, 0x61, 0x58, 0x01, 0xa3, 0x12, 0x17, 0x54, 0x0b, 0x2e, 0xb4, 0xc5, 0xb1, 0xeb, 0xab, 0xe0, 0x43, 0x9b, 0x8e, 0x1f, 0x39, 0x7d, 0x85, 0x1a, 0x3a, 0x4b, 0x9c, 0xf4, 0xbf, 0x31, 0x55, 0x72, 0x41, 0xf5, 0xdb, 0xcb, 0xb3, 0xa6, 0xb5, 0xb8, 0x82, 0xe5, 0xef, 0x18, 0x72, 0xa0, 0x59, 0x08, 0x9b, 0xfa, 0x17, 0xa3 };
uint8_t* key = "some_rand_pw";
uint8_t* result = malloc(64);
unsigned int len;
memset(result, 0, 64);
HMAC(EVP_sha512(), key, 12, data, 64, result, &len);
}

尽管如此,仍有改进的空间。

关于c - 使用 OpenSSL 的 HMAC 时出现访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009903/

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