用C语言实现HMAC-SHA256源码
时间: 2024-04-06 11:33:07 浏览: 233
以下是使用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位的密钥),并对密钥进行保密处理,避免泄露给未授权的人员。同时,也需要注意选择安全的哈希函数,以保证算法的安全性。
阅读全文