我该如何使用HMAC SHA256算法对字符串进行编码?我查阅了OpenSSL库,但没有找到有价值的东西。你有什么建议吗?
我该如何使用HMAC SHA256算法对字符串进行编码?我查阅了OpenSSL库,但没有找到有价值的东西。你有什么建议吗?
HMAC和SHA256是OpenSSL中的不同组件,您需要自行将它们粘合在一起。(请注意,此处使用了快捷方法,可以使用单块缓冲区完成所有操作;增量处理更为复杂。)
#include <openssl/evp.h>
#include <openssl/hmac.h>
unsigned char* hmac_sha256(const void *key, int keylen,
const unsigned char *data, int datalen,
unsigned char *result, unsigned int* resultlen)
{
return HMAC(EVP_sha256(), key, keylen, data, datalen, result, resultlen);
}
即使您的输入是一个字符串,结果也是一个任意字节数组;如果它也需要是一个字符串,那么您就需要应用一些其他的转换,比如十六进制扩展、Base64或适合您应用程序的任何东西。
size_t
,而 resultlen
应该是 unsigned int
并通过地址传递。 - WhozCraigresultlen
时使用地址是个好主意。HMAC 的链接文档页面指定了密钥和数据长度的类型为 int
而不是 size_t
,而缓冲区指针和长度类型之间的一般缺乏类型一致性有点令人困惑,如果不是代码中的明显问题的话。 - Jeffrey Hantinunsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, const unsigned char *d, size_t n, unsigned char *md, unsigned int *md_len)
。就像我说的,很奇怪。最后一个才是真正重要的,至少在你的和我的代码中都是一样的,所以这没什么关系。 - WhozCraig