encryption - Openssl EVP 的 HMAC 验证出错
问题描述
我编写的代码以某种方式无法正常工作。当通过在线工具使用相同的密钥和密码时,hmac 是不同的。
我的代码是:
EVP_MD_CTX* mdctx = NULL;
const EVP_MD* md = NULL;
EVP_PKEY *pkey = NULL;
unsigned char md_value[EVP_MAX_MD_SIZE];
size_t md_len = 0;
mdctx = EVP_MD_CTX_create();
md = EVP_get_digestbyname("SHA256");
const unsigned char a[] = "qwertzuiopqwertzuiopqw";
pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, a, strlen("qwertzuiopqwertzuiopqw"));
EVP_DigestSignInit(mdctx, NULL, md, NULL, pkey);
EVP_DigestSignUpdate(mdctx, "Hallo", sizeof("Hallo")); // iv
EVP_DigestSignFinal(mdctx, md_value, &md_len);
我的代码计算出来的hmac是:eadfb51c9fb3f3fcd5741006861d04bc0d695347db4bfb9e04e954e17583c3c5。
online-tool计算的hmac为:a9e0f9acc1452bdb796556c3c64e29d7f7ab47a59a179ec918c61894eefeba26。
我究竟做错了什么?
解决方案
推荐阅读
- android - 在 Android 上更新有关通知意图的额外数据?
- plotly - 在 anaconda 中安装库时如何避免“WindowsError(5, 'Access is denied')”错误
- docker - 在 Dockerfile 的条件语句中运行
- c# - 如何在代码中设置 $CustomParameter$ 的值?
- objective-c - 在哪些情况下我可以使用 foo.bar 而不是 [foo bar]
- android - xxhdpi 不同设备的屏幕不一样
- python - Seaborn FacetGrid error
- laravel - How can I check the existence of a language before set of its session in laravel?
- javascript - 即使发布成功,Facebook Open Graph Api 身份验证错误
- vbscript - vbscrip ADODB.RecordSet RecordCount 无法正常工作