https://download.csdn.net/download/iamshuke/10172046
使用openssl库
https://blog.csdn.net/qq_33163046/article/details/84035853
例子
hmac_sha256.c
gcc hmac_sha256.c -o hmac_sha256 -lssl
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
#include <unistd.h>
#include <openssl/evp.h>
#include <openssl/aes.h>
#include <openssl/hmac.h>
void hmac_sha256(const char* key, int key_len, const char* data, int date_len, unsigned char* out, unsigned int* out_len)
{
HMAC_CTX ctx;
const EVP_MD * engine = EVP_sha256();
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, (char *)key, key_len, engine, NULL);
HMAC_Update(&ctx, (unsigned char*)data, date_len);
HMAC_Final(&ctx, out, out_len);
HMAC_CTX_cleanup(&ctx);
}
void HexArrayToLowString(unsigned char *hexarray,int length,unsigned char *string)
{
const unsigned char Num2CharTable[] = "0123456789abcdef";
int i = 0;
while(i < length)
{
*(string++) = Num2CharTable[(hexarray[i] >> 4) & 0x0f];
*(string++) = Num2CharTable[hexarray[i] & 0x0f];
i++;
}
*string = 0x0;
}
int main(int argc, char **argv)
{
unsigned char out[64] = {0};
char outBuf[200] = {0};
unsigned int out_len = 0;
char key[50] = "123";
char data[100] = "test Data";
if(argc == 3) {
bzero(key, sizeof(key));
strcpy(key, argv[1]);
bzero(data, sizeof(data));
strcpy(data, argv[2]);
}
hmac_sha256(key, strlen(key), data, strlen(data), out, &out_len);
HexArrayToLowString((unsigned char *)out, out_len, (unsigned char *)outBuf);
printf("key:<%s>,data:<%s>\nhmac_sha256:<%s>\n", key, data, outBuf);
return 0;
}
./hmac_sha256 123 test
key:<123>,data:<test>
hmac_sha256:<a7f5c8c626f994482813230854f66700e626208f52d913b9bd6b4e039aab0f41>
验证网址