概述
HMAC: Hash-based Message Authentication Code,即基于Hash的消息鉴别码
/// @file algo_hmac.h
#ifndef _ALGO_HMAC_H_
#define _ALGO_HMAC_H_
int HmacEncode(const char * algo,
const char * key, unsigned int key_length,
const char * input, unsigned int input_length,
unsigned char * &output, unsigned int &output_length);
#endif
#include "algo_hmac.h"
#include <openssl/hmac.h>
#include <string.h>
#include <iostream>
using namespace std;
int HmacEncode(const char * algo,
const char * key, unsigned int key_length,
const char * input, unsigned int input_length,
unsigned char * &output, unsigned int &output_length) {
const EVP_MD * engine = NULL;
if(strcasecmp("sha512", algo) == 0) {
engine = EVP_sha512();
}
else if(strcasecmp("sha256", algo) == 0) {
engine = EVP_sha256();
}
else if(strcasecmp("sha1", algo) == 0) {
engine = EVP_sha1();
}
else if(strcasecmp("md5", algo) == 0) {
engine = EVP_md5();
}
else if(strcasecmp("sha224", algo) == 0) {
engine = EVP_sha224();
}
else if(strcasecmp("sha384", algo) == 0) {
engine = EVP_sha384();
}
else if(strcasecmp("sha", algo) == 0) {
engine = EVP_sha();
}
else if(strcasecmp("md2", algo) == 0) {
engine = EVP_md2();
}
else {
cout << "Algorithm " << algo << " is not supported by this program!" << endl;
return -1;
}
output = (unsigned char*)malloc(EVP_MAX_MD_SIZE);
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, strlen(key), engine, NULL);
HMAC_Update(&ctx, (unsigned char*)input, strlen(input)); // input is OK; &input is WRONG !!!
HMAC_Final(&ctx, output, &output_length);
HMAC_CTX_cleanup(&ctx);
return 0;
}
最后
以上就是包容含羞草为你收集整理的C++ 使用OpenSSL 做HMAC的全部内容,希望文章能够帮你解决C++ 使用OpenSSL 做HMAC所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复