我是靠谱客的博主 包容含羞草,最近开发中收集的这篇文章主要介绍C++ 使用OpenSSL 做HMAC,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部