gpt4 book ai didi

c++ - RSA_sign 和 RSA_verify 不同的行为

转载 作者:行者123 更新时间:2023-11-28 02:03:08 24 4
gpt4 key购买 nike

我在 C 中有一个示例签名生成器,它将创建一个哈希消息 <count:mac-addr>并生成签名。

当我使用 char *message = "120:08:00:27:7c:b6:18"; 时并签名,则签名验证成功。

但是当我使用

char * generate_hash()
{
xmlDoc *document;
xmlNode *root, *first_child, *node;
char *filename;
char *ap_count;
char *ap_mac_address;
char *message;

filename = "/license.xml";

document = xmlReadFile(filename, NULL, 0);
root = xmlDocGetRootElement(document);
first_child = root->children;
for (node = first_child; node; node = node->next) {
if ( strcmp((char*)node->name, "ap_count") == 0 ) {
ap_count = (char*)xmlNodeGetContent(node);
}
if ( strcmp((char*)node->name, "ap_mac_address") == 0 ){
ap_mac_address = (char*)xmlNodeGetContent(node);
}
}
message = (char *) malloc(strlen(ap_count)+ strlen(ap_mac_address) +1 );
memset(message,0x0,(1 + strlen(ap_count)+ strlen(ap_mac_address)));
strcpy(message,ap_count);
strcat(message,":");
strcat(message,ap_mac_address);
printf(" %d \n", (1 + strlen(ap_count)+ strlen(ap_mac_address)));
return message;
}

--- 验证时,

char* message;
message = generate_hash();

在这两种情况下,我都使用下面的函数调用来生成签名。

if(RSA_sign(NID_sha256, (unsigned char*) message, strlen(message),
signature, &slen, private_key) != 1) {
ERR_print_errors_fp(stdout);
return 1;
}

上述过程的签名验证失败。不确定我在这里做错了什么。

下面是我用来验证的调用。

verified = RSA_verify(NID_sha256, (unsigned char*) message,
strlen(message), sign, file_len, public_key);

最佳答案

verified = RSA_verify(NID_sha256, (unsigned char*) message,
strlen(message), sign, file_len, public_key);

签名可以嵌入 NULL。不要将其视为字符串数据,也不要对其使用 strlen

您必须管理一个指针和一个明确的长度。

关于c++ - RSA_sign 和 RSA_verify 不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585870/

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