gpt4 book ai didi

c++ - 使用 OpenSSL 进行签名验证

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:27 25 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 来验证使用 SHA256 和 RSA 创建的签名(特别是 Signature.getInstance("SHA256withRSA") 中的 Java 实现)。我还有表示公钥指数和模数的十六进制形式的字符串。 (例如,指数为“010001”,对应65537。)这是代码。

int verify(string &plaintext, string &exp, string &mod, string &sig) {
RSA *pub_key = RSA_new();
if (!BN_hex2bn(&pub_key->n, mod.c_str()))
exit(1);
if (!BN_hex2bn(&pub_key->e, exp.c_str()))
exit(1);
int verified = RSA_verify(
NID_sha256,
reinterpret_cast<const unsigned char *>(plaintext.data()),
plaintext.size(),
reinterpret_cast<const unsigned char *>(sig.data()),
sig.size(),
pub_key);
RSA_free(pub_key);
return verified;
}

我还尝试先对明文进行 SHA256 哈希处理,然后将其传递给 RSA_verify(连同 SHA256_DIGEST_LENGTH),但这也不起作用。

unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, plaintext.data(), plaintext.size());
SHA256_Final(hash, &sha256);
// use hash instead of plaintext in call to verify

不幸的是,两种实现都返回 0。我在这里做错了什么,还是我的输入之一似乎有误?

最佳答案

好吧,我明白了。事实证明我的输入是错误的。签名的编码方式与我想象的不同。

获得正确的签名后,我必须使用 hashSHA256_DIGEST_LENGTH 作为消息输入。

关于c++ - 使用 OpenSSL 进行签名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21924562/

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