首页 > 编程语言 >C/C++学习 -- HMAC算法

C/C++学习 -- HMAC算法

时间:2023-10-05 16:31:43浏览次数:38  
标签:-- C++ 算法 哈希 include data HMAC digest

1. HMAC算法概述

HMAC,全称为HMAC-MD5、HMAC-SHA1、HMAC-SHA256等,是一种在数据传输中验证完整性和认证来源的方法。它结合了哈希函数和密钥,通过在数据上应用哈希函数,生成一个带密钥的散列值,用于验证数据的完整性。HMAC算法广泛应用于网络协议、数字签名、认证和访问控制等领域。

2. HMAC算法特点

安全性高: HMAC算法提供了高级别的安全性,因为它依赖于强大的哈希函数。

数据完整性: 可以确保数据在传输过程中没有被篡改。

源认证: 可以验证数据的发送方是否是合法的。

3. HMAC算法原理

HMAC算法的核心思想是将密钥与数据结合,然后应用哈希函数。下面是HMAC算法的基本原理步骤:

选择一个适当的哈希函数(如SHA-256)。

使用密钥对数据进行填充。

将密钥与内部的特定常数异或,生成内部密钥。

使用内部密钥对数据进行哈希。

将哈希结果与内部密钥再次进行哈希。

最终生成的哈希值即为HMAC值。

4. C语言实现HMAC算法

下面是一个简单的C语言示例,演示如何使用HMAC-SHA256算法来计算HMAC值。

#include <stdio.h>
#include <string.h>
#include <openssl/hmac.h>
int main() {
    char key[] = "mysecretkey";
    char data[] = "Hello, HMAC!";
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int digest_length;
    HMAC_CTX ctx;
    HMAC_CTX_init(&ctx);
    HMAC_Init_ex(&ctx, key, strlen(key), EVP_sha256(), NULL);
    HMAC_Update(&ctx, (unsigned char*)data, strlen(data));
    HMAC_Final(&ctx, digest, &digest_length);
    printf("HMAC-SHA256: ");
    for (int i = 0; i < digest_length; i++) {
        printf("%02x", digest[i]);
    }
    printf("\n");




    HMAC_CTX_cleanup(&ctx);




    return 0;
}

这段代码使用OpenSSL库来实现HMAC-SHA256算法。

5. C++语言实现HMAC算法

下面是一个C++语言示例,演示如何使用Crypto++库来计算HMAC值。

#include <iostream>
#include <string>
#include <cryptopp/hmac.h>
#include <cryptopp/sha.h>
int main() {
    std::string key = "mysecretkey";
    std::string data = "Hello, HMAC!";




    CryptoPP::HMAC<CryptoPP::SHA256> hmac((const byte*)key.data(), key.size());
    byte digest[CryptoPP::SHA256::DIGESTSIZE];
    hmac.Update((const byte*)data.data(), data.size());
    hmac.Final(digest);




    std::cout << "HMAC-SHA256: ";
    for (int i = 0; i < CryptoPP::SHA256::DIGESTSIZE; i++) {
        printf("%02x", digest[i]);
    }
    std::cout << std::endl;




    return 0;
}

这段代码使用Crypto++库来实现HMAC-SHA256算法。

总之,HMAC算法是一种强大的加密技术,用于验证数据的完整性和源自身。无论是C语言还是C++语言,都可以使用适当的库来实现HMAC算法以加强数据安全。希望本文有助于你更好地理解和使用HMAC算法。


C/C++学习 -- HMAC算法_密钥对


标签:--,C++,算法,哈希,include,data,HMAC,digest
From: https://blog.51cto.com/u_15288375/7715387

相关文章

  • 230930校内赛
    T1洛阳怀题解首先非常容易求出的是所有的\(\gcd\)对于\(\gcd\)而言,如果它的分数是负数,那么将它除去一定会使这个数列得分变大所以只用求出所有的\(\gcd\)的分数并判断正负以及是否除过当前答案了就可以了还有一点是因为\(\gcd\)是单调不降的,所以可以从后往前查保证......
  • 【ACM算法】整数分块
    思考如何计算以下算式:\[\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\qquad(n\le10^6)\]所有人都会觉得这个非常简单,一个for循环可以直接解决,时间复杂度\(O(n)\),但是如果将\(n\)的范围改大一点点,改成\(n\leq10^{12}\)呢?这时如果我们用朴素算法一定会T;但是我们可以手......
  • VIP介绍
    一、VIP拥有的权限比起普通用户,可拥有更多的设备;比起普通用户,二级域名和端口可固定;比起普通用户,提供及时的技术支持,如游戏p2p互联比起普通用户,可以享有更短的二级域名;比起普通用户,提供更多的隧道映射;Q咨询:点击进群二、捐助获取VIP支持......
  • c语言代码练习19
    需求:利用二分查找,查找数组中是否有用户输入的数字。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//这里的arr[]实际上是一个指针intayue(intarr[],inta,intp){intleft=0;intright=p-1;while(left<=right){inti=(ri......
  • Go - Representing Time Zones
    Problem: YouwanttoincludethetimezoneinformationinaTimestruct.Solution: TheTimestructincludesaLocation,whichistherepresentationofthetimezone. Atimezoneisanareathatfollowsastandardtimethatroughlyfollowslongitudebu......
  • PNPM安装后无法识别
    正常安装后可以通过PNPM-v查看到版本号,如下图 安装后提示无法识别,有可能是没有添加环境变量导致,在Path中添加node_global的依赖即可如何找到nodejs_global就不用解释了,一搜就有 在这个文件夹下可以看到通过npm安装的pnpm将目录新增至,环境变量,注意环境变量以"\"......
  • scrapy post请求练习
    importscrapyimportjsonclassTransferpostSpider(scrapy.Spider):name='transferPost'allowed_domains=['fanyi.baidu.com']#start_urls=['http://fanyi.baidu.com/']#post请求不能用默认生成的,因为不能携带请求参数#de......
  • 基于 K8S 搭建自己的 ELK 服务
    基于K8S(K3S)搭建自己的ELK服务对应的Yaml资源在https://github.com/nicelizhi/k8s-elkelasticsearch服务Servicekind:ServiceapiVersion:v1metadata:name:elasticsearchspec:ports:-name:elasticsearchprotocol:TCPport:9200......
  • JUC工具类CountDownLatch、CyclicBarrier、Semaphore介绍
    CountDownLatch:它是一种同步工具,用于控制一个或多个线程等待其他线程完成操作后再继续执行。它的作用是让某个线程等待一组操作执行完成,再继续执行自己的任务。CountDownLatch内部有一个计数器,当计数器的值为0时,等待的线程将会被唤醒。通过CountDownLatch的构造函数可以指定计......
  • MapReduce之学习规约
    1、概念2、代码实现自定义一个类:在JobMain(与之前的基本一样)里面:......