SHA1,HMACSHA1,SHA256,HMACSHA256,BASE64

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>

验证网址

http://encode.chahuo.com/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值