C 如何验证给定哈希和公钥的数字签名?

C 如何验证给定哈希和公钥的数字签名?,c,openssl,digital-signature,evp-cipher,C,Openssl,Digital Signature,Evp Cipher,关于如何验证消息上的数字签名,有很多用C编写的示例,但我的用例要求我只提供消息哈希 那么,是否有一种替代方法可以替代EVP_DigestVerifyUpdate(mdctx、msg、strlen(msg))在哪里可以直接提供哈希?这就是您要找的吗 EVP_PKEY *public_key = ...; EVP_PKEY_CTX *public_key_ctx = EVP_PKEY_CTX_new(public_key, NULL); EVP_PKEY_verify_init(public_ke

关于如何验证消息上的数字签名,有很多用C编写的示例,但我的用例要求我只提供消息哈希


那么,是否有一种替代方法可以替代EVP_DigestVerifyUpdate(mdctx、msg、strlen(msg))在哪里可以直接提供哈希?

这就是您要找的吗

EVP_PKEY *public_key = ...;
EVP_PKEY_CTX *public_key_ctx = EVP_PKEY_CTX_new(public_key, NULL);

EVP_PKEY_verify_init(public_key_ctx);
if (1 != EVP_PKEY_verify(public_key_ctx, sig, siglen, hash, hashlen))
    // invalid signature

我不想说这是不可能的,但对于执行副总裁,我从未见过(但总是愿意学习)。每当我不得不做类似的事情时(对我来说,通常是我已经有了摘要的签名,很少是验证),我必须直接使用,这需要消息摘要,而不是原始消息。如果您使用的是RSA(我无法想象您不会),这可能是您的一个选择。不幸的是,我使用的是ECDSA:/