gpt4 book ai didi

android - 如何将 openssl_pkey_get_public 和 openssl_verify 转换为 C

转载 作者:行者123 更新时间:2023-11-30 03:17:57 28 4
gpt4 key购买 nike

现在我正在寻找一种方法来验证来自“Google inapp billing”系统的签名。我在 php 中找到了“openssl_pkey_get_public”和“openssl_verify”函数(非常简单!!),但没有 C 或 C++ 的示例或文档;;;(我花了最后两天时间搜索它..OTL。 ..)

现在我有:
- 公钥
- 签名
- 从谷歌购买数据
我想用C或C++实现验证码

有没有人知道我怎样才能得到它?

我在下面搜索过..- http://www.nlnetlabs.nl/downloads/publications/hsm/hsm_node21.html 它处理“openssl EVP”..但它讲述了 HSM(硬件安全模块)

谢谢!

最佳答案

下面是我所问的答案..1代表成功,0代表失败谢谢..

int Verify_GoogleInappBilling_Signature(const char* data, const char* signature, const char* pub_key_id)
{
std::shared_ptr<EVP_MD_CTX> mdctx = std::shared_ptr<EVP_MD_CTX>(EVP_MD_CTX_create(), EVP_MD_CTX_destroy);
const EVP_MD* md = EVP_get_digestbyname("SHA1");
if(NULL == md)
{
return -1;
}
if(0 == EVP_VerifyInit_ex(mdctx.get(), md, NULL))
{
return -1;
}

if(0 == EVP_VerifyUpdate(mdctx.get(), (void*)data, strlen(data)))
{
return -1;
}

std::shared_ptr<BIO> b64 = std::shared_ptr<BIO>(BIO_new(BIO_f_base64()), BIO_free);
BIO_set_flags(b64.get(),BIO_FLAGS_BASE64_NO_NL);

std::shared_ptr<BIO> bPubKey = std::shared_ptr<BIO>(BIO_new(BIO_s_mem()), BIO_free);
BIO_puts(bPubKey.get(),pub_key_id);
BIO_push(b64.get(), bPubKey.get());

std::shared_ptr<EVP_PKEY> pubkey = std::shared_ptr<EVP_PKEY>(d2i_PUBKEY_bio(b64.get(), NULL), EVP_PKEY_free);

std::string decoded_signature = Base64Decode(std::string(signature));
return EVP_VerifyFinal(mdctx.get(), (unsigned char*)decoded_signature.c_str(), decoded_signature.length(), pubkey.get());
}

关于android - 如何将 openssl_pkey_get_public 和 openssl_verify 转换为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700986/

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