用C语言实现HMAC-SHA256源码
时间: 2024-04-06 21:33:07 浏览: 213
以下是使用C语言实现HMAC-SHA256的源代码:
```c
#include <stdio.h>
#include <string.h>
#include <openssl/hmac.h>
#include <openssl/sha.h>
int main() {
const char* key = "mysecretkey";
const char* data = "Hello World";
unsigned char digest[SHA256_DIGEST_LENGTH];
unsigned int digest_len;
HMAC(EVP_sha256(), key, strlen(key), (unsigned char*) data, strlen(data), digest, &digest_len);
for(int i=0; i<SHA256_DIGEST_LENGTH; i++) {
printf("%02x", digest[i]);
}
return 0;
}
```
和上面的C++代码类似,这个例子中我们同样使用了OpenSSL库来计算HMAC-SHA256摘要。在这个例子中,我们使用了一个秘钥和一个数据字符串来计算摘要。计算出的摘要被存储在digest数组中,并通过循环输出为十六进制字符串。请注意,这个例子中的秘钥和数据都是硬编码的,实际使用时应该从安全的来源中获取。
相关问题
HMAC C源码
以下是使用C语言实现HMAC算法的源码示例:
```c
#include <string.h>
#include <openssl/hmac.h>
void hmac_sha256(char *key, int key_len, char *message, int message_len, unsigned char *hmac_sha256) {
/*
计算HMAC-SHA256
:param key: 密钥
:param key_len: 密钥长度
:param message: 消息
:param message_len: 消息长度
:param hmac_sha256: HMAC-SHA256值
*/
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, key_len, EVP_sha256(), NULL);
HMAC_Update(&ctx, (unsigned char*)message, message_len);
HMAC_Final(&ctx, hmac_sha256, NULL);
HMAC_CTX_cleanup(&ctx);
}
```
在上述代码中,我们使用OpenSSL库中的HMAC函数来实现HMAC-SHA256算法。其中,HMAC_CTX_init()和HMAC_CTX_cleanup()函数用于初始化和清理HMAC上下文,HMAC_Init_ex()函数用于设置密钥和哈希函数,HMAC_Update()函数用于更新消息内容,HMAC_Final()函数用于计算HMAC值并存储到指定的变量中。
需要注意的是,在使用HMAC算法时,需要确保密钥长度足够长(一般建议使用至少128位的密钥),并对密钥进行保密处理,避免泄露给未授权的人员。同时,也需要注意选择安全的哈希函数,以保证算法的安全性。
POS MAC算法C源码
以下是使用C语言实现的POS MAC算法示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/hmac.h>
int main()
{
unsigned char key[] = "secret_key";
unsigned char message[] = "Hello, world!";
unsigned char mac[32];
// 生成MAC值
HMAC(EVP_sha256(), key, strlen(key), message, strlen(message), mac, NULL);
// 发送消息和MAC值
unsigned char send_message[1024];
memcpy(send_message, message, strlen(message));
memcpy(send_message + strlen(message), mac, 32);
// 接收消息和MAC值
unsigned char recv_message[1024];
memcpy(recv_message, send_message, strlen(message) + 32);
// 验证MAC值
unsigned char recv_mac[32];
memcpy(recv_mac, recv_message + strlen(message), 32);
recv_message[strlen(message)] = '\0';
if (memcmp(HMAC(EVP_sha256(), key, strlen(key), recv_message, strlen(recv_message), NULL, NULL), recv_mac, 32) == 0)
{
printf("MAC验证通过\n");
}
else
{
printf("MAC验证失败\n");
}
return 0;
}
```
在上面的代码中,我们使用OpenSSL库中的HMAC函数生成和验证MAC值。首先,我们定义了一个密钥key和一个消息message,然后使用HMAC函数生成MAC值。在发送消息时,我们将消息和MAC值合并为一个send_message。在接收消息时,我们从recv_message中提取出MAC值和消息,并使用HMAC函数验证MAC值的正确性。如果MAC值验证通过,则认为消息是真实的。
阅读全文